fake_tile_manager.cc revision f2477e01787aa58f445919b809d89e252beef54f
1b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis// Copyright 2012 The Chromium Authors. All rights reserved.
2b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis// Use of this source code is governed by a BSD-style license that can be
3b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis// found in the LICENSE file.
4b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
5b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis#include "cc/test/fake_tile_manager.h"
6b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
7b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis#include <deque>
8b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis#include <limits>
9b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
10b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis#include "cc/resources/raster_worker_pool.h"
11b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
12b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidisnamespace cc {
13b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
14b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidisnamespace {
15b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
16b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidisclass FakeRasterWorkerPool : public RasterWorkerPool {
173c385c28cf1f27b193a620d2e51f814873362cebJohn McCall public:
18833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall  FakeRasterWorkerPool() : RasterWorkerPool(NULL, 1) {}
1930a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth
20ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor  virtual void ScheduleTasks(RasterTask::Queue* queue) OVERRIDE {
21aa49a7d70e58dac2aeb40664ba16d2ea571b8c95Daniel Dunbar    RasterWorkerPool::SetRasterTasks(queue);
22b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis    for (RasterTaskVector::const_iterator it = raster_tasks().begin();
23b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis         it != raster_tasks().end(); ++it) {
24c21c7e9c2cded68f91be15be6847c9649242dc17Douglas Gregor      completed_tasks_.push_back(it->get());
25b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis    }
26a93c934af4fbf97cbe8e649d82e68ccacfe57c95John McCall  }
2734a0447b8072e0da14c0980597da9d03a1495662John McCall  virtual void CheckForCompletedTasks() OVERRIDE {
28b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis    while (!completed_tasks_.empty()) {
2951bd803fbdade51d674598ed45da3d54190a656cJohn McCall      internal::RasterWorkerPoolTask* task = completed_tasks_.front().get();
3051bd803fbdade51d674598ed45da3d54190a656cJohn McCall      task->WillComplete();
3151bd803fbdade51d674598ed45da3d54190a656cJohn McCall      task->CompleteOnOriginThread();
3251bd803fbdade51d674598ed45da3d54190a656cJohn McCall      task->DidComplete();
3351bd803fbdade51d674598ed45da3d54190a656cJohn McCall      completed_tasks_.pop_front();
3451bd803fbdade51d674598ed45da3d54190a656cJohn McCall    }
35b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  }
36b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  virtual GLenum GetResourceTarget() const OVERRIDE {
37b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis    return GL_TEXTURE_2D;
38b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  }
39b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  virtual ResourceFormat GetResourceFormat() const OVERRIDE {
40b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis    return RGBA_8888;
4134a0447b8072e0da14c0980597da9d03a1495662John McCall  }
4234a0447b8072e0da14c0980597da9d03a1495662John McCall  virtual void OnRasterTasksFinished() OVERRIDE {}
43f4c7371fb1d3cebcfb40abad4537bb82515704eaJohn McCall  virtual void OnRasterTasksRequiredForActivationFinished() OVERRIDE {}
44b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump private:
46b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  typedef std::deque<scoped_refptr<internal::RasterWorkerPoolTask> > TaskDeque;
47464011827c5f9047caaba7e245556d66a65a15b6David Blaikie  TaskDeque completed_tasks_;
48464011827c5f9047caaba7e245556d66a65a15b6David Blaikie};
4939e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie
5039e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie}  // namespace
5165124fe81f61eed98b845c87e3a78a780f3deb11David Blaikie
5239e6ab4be93d9c5e729a578ddd9d415cd2d49872David BlaikieFakeTileManager::FakeTileManager(TileManagerClient* client)
5339e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie    : TileManager(client,
5439e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  NULL,
5539e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  make_scoped_ptr<RasterWorkerPool>(new FakeRasterWorkerPool),
5639e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  1,
57464011827c5f9047caaba7e245556d66a65a15b6David Blaikie                  std::numeric_limits<unsigned>::max(),
58464011827c5f9047caaba7e245556d66a65a15b6David Blaikie                  NULL) {}
59464011827c5f9047caaba7e245556d66a65a15b6David Blaikie
6039e6ab4be93d9c5e729a578ddd9d415cd2d49872David BlaikieFakeTileManager::FakeTileManager(TileManagerClient* client,
6139e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                                 ResourceProvider* resource_provider)
6265124fe81f61eed98b845c87e3a78a780f3deb11David Blaikie    : TileManager(client,
6339e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  resource_provider,
6439e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  make_scoped_ptr<RasterWorkerPool>(new FakeRasterWorkerPool),
6539e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  1,
6639e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  std::numeric_limits<unsigned>::max(),
6739e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie                  NULL) {}
6839e6ab4be93d9c5e729a578ddd9d415cd2d49872David Blaikie
6939e6ab4be93d9c5e729a578ddd9d415cd2d49872David BlaikieFakeTileManager::FakeTileManager(TileManagerClient* client,
7051bd803fbdade51d674598ed45da3d54190a656cJohn McCall                                 ResourceProvider* resource_provider,
7151bd803fbdade51d674598ed45da3d54190a656cJohn McCall                                 size_t raster_task_limit_bytes)
7251bd803fbdade51d674598ed45da3d54190a656cJohn McCall    : TileManager(client,
7351bd803fbdade51d674598ed45da3d54190a656cJohn McCall                  resource_provider,
7451bd803fbdade51d674598ed45da3d54190a656cJohn McCall                  make_scoped_ptr<RasterWorkerPool>(new FakeRasterWorkerPool),
7551bd803fbdade51d674598ed45da3d54190a656cJohn McCall                  1,
7651bd803fbdade51d674598ed45da3d54190a656cJohn McCall                  raster_task_limit_bytes,
7751bd803fbdade51d674598ed45da3d54190a656cJohn McCall                  NULL) {}
7851bd803fbdade51d674598ed45da3d54190a656cJohn McCall
7951bd803fbdade51d674598ed45da3d54190a656cJohn McCallFakeTileManager::~FakeTileManager() {}
8051bd803fbdade51d674598ed45da3d54190a656cJohn McCall
8134a0447b8072e0da14c0980597da9d03a1495662John McCallvoid FakeTileManager::AssignMemoryToTiles(
8234a0447b8072e0da14c0980597da9d03a1495662John McCall    const GlobalStateThatImpactsTilePriority& state) {
8334a0447b8072e0da14c0980597da9d03a1495662John McCall  tiles_for_raster.clear();
84f4c7371fb1d3cebcfb40abad4537bb82515704eaJohn McCall  all_tiles.Clear();
8534a0447b8072e0da14c0980597da9d03a1495662John McCall
86b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  SetGlobalStateForTesting(state);
8751bd803fbdade51d674598ed45da3d54190a656cJohn McCall  GetTilesWithAssignedBins(&all_tiles);
88a4923eb7c4b04d360cb2747641a5e92818edf804Douglas Gregor  AssignGpuMemoryToTiles(&all_tiles, &tiles_for_raster);
8951bd803fbdade51d674598ed45da3d54190a656cJohn McCall}
9051bd803fbdade51d674598ed45da3d54190a656cJohn McCall
9151bd803fbdade51d674598ed45da3d54190a656cJohn McCallbool FakeTileManager::HasBeenAssignedMemory(Tile* tile) {
9234a0447b8072e0da14c0980597da9d03a1495662John McCall  return std::find(tiles_for_raster.begin(),
9334a0447b8072e0da14c0980597da9d03a1495662John McCall                   tiles_for_raster.end(),
94b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis                   tile) != tiles_for_raster.end();
95b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis}
96b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis
97b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidisvoid FakeTileManager::CheckForCompletedTasks() {
98b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis  RasterWorkerPoolForTesting()->CheckForCompletedTasks();
99b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis}
10051bd803fbdade51d674598ed45da3d54190a656cJohn McCall
10151bd803fbdade51d674598ed45da3d54190a656cJohn McCallvoid FakeTileManager::Release(Tile* tile) {
10251bd803fbdade51d674598ed45da3d54190a656cJohn McCall  TileManager::Release(tile);
10334a0447b8072e0da14c0980597da9d03a1495662John McCall  CleanUpReleasedTiles();
104f4c7371fb1d3cebcfb40abad4537bb82515704eaJohn McCall}
10534a0447b8072e0da14c0980597da9d03a1495662John McCall
10634a0447b8072e0da14c0980597da9d03a1495662John McCall}  // namespace cc
107b17166c8077cd900cca83a895c43b30ea6660598Argyrios Kyrtzidis