// Copyright 2014 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_SURFACES_SURFACE_RESOURCE_HOLDER_H_
#define CC_SURFACES_SURFACE_RESOURCE_HOLDER_H_

#include "base/containers/hash_tables.h"
#include "base/macros.h"
#include "cc/resources/resource_provider.h"
#include "cc/resources/returned_resource.h"
#include "cc/surfaces/surfaces_export.h"

namespace cc {
class SurfaceFactoryClient;

// A SurfaceResourceHolder manages the lifetime of resources submitted by a
// particular SurfaceFactory. Each resource is held by the service until
// it is no longer referenced by any pending frames or by any
// resource providers.
class CC_SURFACES_EXPORT SurfaceResourceHolder {
 public:
  explicit SurfaceResourceHolder(SurfaceFactoryClient* client);
  ~SurfaceResourceHolder();

  void ReceiveFromChild(const TransferableResourceArray& resources);
  void RefResources(const TransferableResourceArray& resources);
  void UnrefResources(const ReturnedResourceArray& resources);

 private:
  SurfaceFactoryClient* client_;

  struct ResourceRefs {
    ResourceRefs();

    int refs_received_from_child;
    int refs_holding_resource_alive;
  };
  // Keeps track of the number of users currently in flight for each resource
  // ID we've received from the client. When this counter hits zero for a
  // particular resource, that ID is available to return to the client.
  typedef base::hash_map<ResourceProvider::ResourceId, ResourceRefs>
      ResourceIdCountMap;
  ResourceIdCountMap resource_id_use_count_map_;

  DISALLOW_COPY_AND_ASSIGN(SurfaceResourceHolder);
};

}  // namespace cc

#endif  // CC_SURFACES_SURFACE_RESOURCE_HOLDER_H_
