// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_RESOURCES_UI_RESOURCE_CLIENT_H_
#define CC_RESOURCES_UI_RESOURCE_CLIENT_H_

#include "base/callback.h"
#include "base/memory/ref_counted.h"
#include "cc/cc_export.h"

namespace cc {

class UIResourceBitmap;

typedef int UIResourceId;

class CC_EXPORT UIResourceClient {
 public:
  // GetBitmap() will be called once soon after resource creation and then will
  // be called afterwards whenever the GL context is lost, on the same thread
  // that LayerTreeHost::CreateUIResource was called on.  It is only safe to
  // delete a UIResourceClient object after DeleteUIResource has been called for
  // all IDs associated with it.  A valid bitmap always must be returned but it
  // doesn't need to be the same size or format as the original.
  // The bitmap's dimensions must *not* exceed the maximum texture size
  // supported by the GPU. For resources that are not bigger than the viewport
  // this should not be a problem, but for much larger resources, the caller is
  // responsible for ensuring this.
  virtual UIResourceBitmap GetBitmap(UIResourceId uid,
                                     bool resource_lost) = 0;
  virtual ~UIResourceClient() {}
};

}  // namespace cc

#endif  // CC_RESOURCES_UI_RESOURCE_CLIENT_H_
