blob: 4df7ffe8bfecdf79da5d6886c2593e5a5b61860c [file] [log] [blame]
// Copyright (c) 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 COMPONENTS_VIZ_CLIENT_CLIENT_SHARED_BITMAP_MANAGER_H_
#define COMPONENTS_VIZ_CLIENT_CLIENT_SHARED_BITMAP_MANAGER_H_
#include <stdint.h>
#include <memory>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/shared_memory.h"
#include "base/synchronization/lock.h"
#include "components/viz/client/viz_client_export.h"
#include "components/viz/common/resources/shared_bitmap_manager.h"
#include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
#include "services/viz/public/interfaces/compositing/shared_bitmap_allocation_notifier.mojom.h"
namespace viz {
// A SharedBitmapManager implementation for use outside of the display
// compositor's process. This implementation supports SharedBitmaps that
// can be transported over process boundaries to the display compositor.
class VIZ_CLIENT_EXPORT ClientSharedBitmapManager : public SharedBitmapManager {
public:
explicit ClientSharedBitmapManager(
scoped_refptr<mojom::ThreadSafeSharedBitmapAllocationNotifierPtr>
shared_bitmap_allocation_notifier);
~ClientSharedBitmapManager() override;
// SharedBitmapManager implementation.
std::unique_ptr<SharedBitmap> AllocateSharedBitmap(
const gfx::Size& size) override;
std::unique_ptr<SharedBitmap> GetSharedBitmapFromId(
const gfx::Size&,
const SharedBitmapId&) override;
std::unique_ptr<SharedBitmap> GetBitmapForSharedMemory(
base::SharedMemory* mem);
private:
uint32_t NotifyAllocatedSharedBitmap(base::SharedMemory* memory,
const SharedBitmapId& id);
scoped_refptr<mojom::ThreadSafeSharedBitmapAllocationNotifierPtr>
shared_bitmap_allocation_notifier_;
base::Lock lock_;
// Each SharedBitmap allocated by this class is assigned a unique sequence
// number that is incremental.
uint32_t last_sequence_number_ = 0;
DISALLOW_COPY_AND_ASSIGN(ClientSharedBitmapManager);
};
} // namespace viz
#endif // COMPONENTS_VIZ_CLIENT_CLIENT_SHARED_BITMAP_MANAGER_H_