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