123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/test/test_shared_bitmap_manager.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/bind.h"
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace cc {
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void FreeSharedBitmap(SharedBitmap* shared_bitmap) {
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  delete shared_bitmap->memory();
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void IgnoreSharedBitmap(SharedBitmap* shared_bitmap) {}
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TestSharedBitmapManager::TestSharedBitmapManager() {}
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TestSharedBitmapManager::~TestSharedBitmapManager() {}
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)scoped_ptr<SharedBitmap> TestSharedBitmapManager::AllocateSharedBitmap(
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const gfx::Size& size) {
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::AutoLock lock(lock_);
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  scoped_ptr<base::SharedMemory> memory(new base::SharedMemory);
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  memory->CreateAndMapAnonymous(size.GetArea() * 4);
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SharedBitmapId id = SharedBitmap::GenerateId();
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bitmap_map_[id] = memory.get();
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return scoped_ptr<SharedBitmap>(
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      new SharedBitmap(memory.release(), id, base::Bind(&FreeSharedBitmap)));
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)scoped_ptr<SharedBitmap> TestSharedBitmapManager::GetSharedBitmapFromId(
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const gfx::Size&,
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const SharedBitmapId& id) {
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::AutoLock lock(lock_);
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (bitmap_map_.find(id) == bitmap_map_.end())
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    return scoped_ptr<SharedBitmap>();
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return scoped_ptr<SharedBitmap>(
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      new SharedBitmap(bitmap_map_[id], id, base::Bind(&IgnoreSharedBitmap)));
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)scoped_ptr<SharedBitmap> TestSharedBitmapManager::GetBitmapForSharedMemory(
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    base::SharedMemory* memory) {
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::AutoLock lock(lock_);
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  SharedBitmapId id = SharedBitmap::GenerateId();
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bitmap_map_[id] = memory;
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  return scoped_ptr<SharedBitmap>(
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      new SharedBitmap(memory, id, base::Bind(&IgnoreSharedBitmap)));
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace cc
52