Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1011)

Side by Side Diff: cc/resources/tile_manager.cc

Issue 111143005: cc: Gather and lock/unlock SkDiscardablePixelRefs instead of skia::LazyPixelRefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 851
852 // Schedule running of |tasks|. This replaces any previously 852 // Schedule running of |tasks|. This replaces any previously
853 // scheduled tasks and effectively cancels all tasks not present 853 // scheduled tasks and effectively cancels all tasks not present
854 // in |tasks|. 854 // in |tasks|.
855 raster_worker_pool_->ScheduleTasks(&tasks); 855 raster_worker_pool_->ScheduleTasks(&tasks);
856 856
857 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; 857 did_check_for_completed_tasks_since_last_schedule_tasks_ = false;
858 } 858 }
859 859
860 RasterWorkerPool::Task TileManager::CreateImageDecodeTask( 860 RasterWorkerPool::Task TileManager::CreateImageDecodeTask(
861 Tile* tile, skia::LazyPixelRef* pixel_ref) { 861 Tile* tile, SkPixelRef* pixel_ref) {
862 return RasterWorkerPool::CreateImageDecodeTask( 862 return RasterWorkerPool::CreateImageDecodeTask(
863 pixel_ref, 863 pixel_ref,
864 tile->layer_id(), 864 tile->layer_id(),
865 rendering_stats_instrumentation_, 865 rendering_stats_instrumentation_,
866 base::Bind(&TileManager::OnImageDecodeTaskCompleted, 866 base::Bind(&TileManager::OnImageDecodeTaskCompleted,
867 base::Unretained(this), 867 base::Unretained(this),
868 tile->layer_id(), 868 tile->layer_id(),
869 base::Unretained(pixel_ref))); 869 base::Unretained(pixel_ref)));
870 } 870 }
871 871
872 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { 872 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
873 ManagedTileState& mts = tile->managed_state(); 873 ManagedTileState& mts = tile->managed_state();
874 874
875 scoped_ptr<ScopedResource> resource = 875 scoped_ptr<ScopedResource> resource =
876 resource_pool_->AcquireResource(tile->tile_size_.size()); 876 resource_pool_->AcquireResource(tile->tile_size_.size());
877 const ScopedResource* const_resource = resource.get(); 877 const ScopedResource* const_resource = resource.get();
878 878
879 // Create and queue all image decode tasks that this tile depends on. 879 // Create and queue all image decode tasks that this tile depends on.
880 RasterWorkerPool::Task::Set decode_tasks; 880 RasterWorkerPool::Task::Set decode_tasks;
881 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()]; 881 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()];
882 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(), 882 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(),
883 tile->contents_scale(), 883 tile->contents_scale(),
884 tile->picture_pile()); 884 tile->picture_pile());
885 iter; ++iter) { 885 iter; ++iter) {
886 skia::LazyPixelRef* pixel_ref = *iter; 886 SkPixelRef* pixel_ref = *iter;
887 uint32_t id = pixel_ref->getGenerationID(); 887 uint32_t id = pixel_ref->getGenerationID();
888 888
889 // Append existing image decode task if available. 889 // Append existing image decode task if available.
890 PixelRefTaskMap::iterator decode_task_it = existing_pixel_refs.find(id); 890 PixelRefTaskMap::iterator decode_task_it = existing_pixel_refs.find(id);
891 if (decode_task_it != existing_pixel_refs.end()) { 891 if (decode_task_it != existing_pixel_refs.end()) {
892 decode_tasks.Insert(decode_task_it->second); 892 decode_tasks.Insert(decode_task_it->second);
893 continue; 893 continue;
894 } 894 }
895 895
896 // Create and append new image decode task for this pixel ref. 896 // Create and append new image decode task for this pixel ref.
(...skipping 17 matching lines...) Expand all
914 base::Bind(&TileManager::OnRasterTaskCompleted, 914 base::Bind(&TileManager::OnRasterTaskCompleted,
915 base::Unretained(this), 915 base::Unretained(this),
916 tile->id(), 916 tile->id(),
917 base::Passed(&resource), 917 base::Passed(&resource),
918 mts.raster_mode), 918 mts.raster_mode),
919 &decode_tasks); 919 &decode_tasks);
920 } 920 }
921 921
922 void TileManager::OnImageDecodeTaskCompleted( 922 void TileManager::OnImageDecodeTaskCompleted(
923 int layer_id, 923 int layer_id,
924 skia::LazyPixelRef* pixel_ref, 924 SkPixelRef* pixel_ref,
925 bool was_canceled) { 925 bool was_canceled) {
926 // If the task was canceled, we need to clean it up 926 // If the task was canceled, we need to clean it up
927 // from |image_decode_tasks_|. 927 // from |image_decode_tasks_|.
928 if (!was_canceled) 928 if (!was_canceled)
929 return; 929 return;
930 930
931 LayerPixelRefTaskMap::iterator layer_it = 931 LayerPixelRefTaskMap::iterator layer_it =
932 image_decode_tasks_.find(layer_id); 932 image_decode_tasks_.find(layer_id);
vmpstr 2013/12/20 17:41:06 I assume we'll also be removing this decode-once t
reveman 2013/12/20 18:22:19 Yes, correct.
933 933
934 if (layer_it == image_decode_tasks_.end()) 934 if (layer_it == image_decode_tasks_.end())
935 return; 935 return;
936 936
937 PixelRefTaskMap& pixel_ref_tasks = layer_it->second; 937 PixelRefTaskMap& pixel_ref_tasks = layer_it->second;
938 PixelRefTaskMap::iterator task_it = 938 PixelRefTaskMap::iterator task_it =
939 pixel_ref_tasks.find(pixel_ref->getGenerationID()); 939 pixel_ref_tasks.find(pixel_ref->getGenerationID());
940 940
941 if (task_it != pixel_ref_tasks.end()) 941 if (task_it != pixel_ref_tasks.end())
942 pixel_ref_tasks.erase(task_it); 942 pixel_ref_tasks.erase(task_it);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 int offset_y, 1016 int offset_y,
1017 int width, 1017 int width,
1018 int height) { 1018 int height) {
1019 scoped_refptr<TileBundle> bundle = make_scoped_refptr( 1019 scoped_refptr<TileBundle> bundle = make_scoped_refptr(
1020 new TileBundle(this, offset_x, offset_y, width, height)); 1020 new TileBundle(this, offset_x, offset_y, width, height));
1021 bundles_[bundle->id()] = bundle; 1021 bundles_[bundle->id()] = bundle;
1022 return bundle; 1022 return bundle;
1023 } 1023 }
1024 1024
1025 } // namespace cc 1025 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698