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

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

Issue 21159007: cc: Adding support for RGBA_4444 tile textures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Back to 4_4_4_4 textures in RP Created 7 years, 4 months 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "cc/debug/benchmark_instrumentation.h" 10 #include "cc/debug/benchmark_instrumentation.h"
(...skipping 30 matching lines...) Expand all
41 gfx::Rect content_rect, 41 gfx::Rect content_rect,
42 float contents_scale, 42 float contents_scale,
43 RasterMode raster_mode, 43 RasterMode raster_mode,
44 bool is_tile_in_pending_tree_now_bin, 44 bool is_tile_in_pending_tree_now_bin,
45 TileResolution tile_resolution, 45 TileResolution tile_resolution,
46 int layer_id, 46 int layer_id,
47 const void* tile_id, 47 const void* tile_id,
48 int source_frame_number, 48 int source_frame_number,
49 RenderingStatsInstrumentation* rendering_stats, 49 RenderingStatsInstrumentation* rendering_stats,
50 const RasterWorkerPool::RasterTask::Reply& reply, 50 const RasterWorkerPool::RasterTask::Reply& reply,
51 TaskVector* dependencies) 51 TaskVector* dependencies,
52 bool use_16bit_tiles)
52 : internal::RasterWorkerPoolTask(resource, dependencies), 53 : internal::RasterWorkerPoolTask(resource, dependencies),
53 picture_pile_(picture_pile), 54 picture_pile_(picture_pile),
54 content_rect_(content_rect), 55 content_rect_(content_rect),
55 contents_scale_(contents_scale), 56 contents_scale_(contents_scale),
56 raster_mode_(raster_mode), 57 raster_mode_(raster_mode),
57 is_tile_in_pending_tree_now_bin_(is_tile_in_pending_tree_now_bin), 58 is_tile_in_pending_tree_now_bin_(is_tile_in_pending_tree_now_bin),
58 tile_resolution_(tile_resolution), 59 tile_resolution_(tile_resolution),
59 layer_id_(layer_id), 60 layer_id_(layer_id),
60 tile_id_(tile_id), 61 tile_id_(tile_id),
61 source_frame_number_(source_frame_number), 62 source_frame_number_(source_frame_number),
62 rendering_stats_(rendering_stats), 63 rendering_stats_(rendering_stats),
63 reply_(reply) {} 64 reply_(reply),
65 use_16bit_tiles_(use_16bit_tiles) {}
64 66
65 void RunAnalysisOnThread(unsigned thread_index) { 67 void RunAnalysisOnThread(unsigned thread_index) {
66 TRACE_EVENT1("cc", 68 TRACE_EVENT1("cc",
67 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", 69 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread",
68 "data", 70 "data",
69 TracedValue::FromValue(DataAsValue().release())); 71 TracedValue::FromValue(DataAsValue().release()));
70 72
71 DCHECK(picture_pile_.get()); 73 DCHECK(picture_pile_.get());
72 DCHECK(rendering_stats_); 74 DCHECK(rendering_stats_);
73 75
74 PicturePileImpl* picture_clone = 76 PicturePileImpl* picture_clone =
75 picture_pile_->GetCloneForDrawingOnThread(thread_index); 77 picture_pile_->GetCloneForDrawingOnThread(thread_index);
76 78
77 DCHECK(picture_clone); 79 DCHECK(picture_clone);
78 80
79 base::TimeTicks start_time = rendering_stats_->StartRecording(); 81 base::TimeTicks start_time = rendering_stats_->StartRecording();
80 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_); 82 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_);
81 base::TimeDelta duration = rendering_stats_->EndRecording(start_time); 83 base::TimeDelta duration = rendering_stats_->EndRecording(start_time);
82 84
83 // Record the solid color prediction. 85 // Record the solid color prediction.
84 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", 86 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed",
85 analysis_.is_solid_color); 87 analysis_.is_solid_color);
86 rendering_stats_->AddAnalysisResult(duration, analysis_.is_solid_color); 88 rendering_stats_->AddAnalysisResult(duration, analysis_.is_solid_color);
87 89
88 // Clear the flag if we're not using the estimator. 90 // Clear the flag if we're not using the estimator.
89 analysis_.is_solid_color &= kUseColorEstimator; 91 analysis_.is_solid_color &= kUseColorEstimator;
90 } 92 }
91 93
92 bool RunRasterOnThread(SkDevice* device, unsigned thread_index) { 94 bool RunRasterOnThread(unsigned thread_index,
95 void* buffer, gfx::Size size) {
93 TRACE_EVENT2( 96 TRACE_EVENT2(
94 benchmark_instrumentation::kCategory, 97 benchmark_instrumentation::kCategory,
95 benchmark_instrumentation::kRunRasterOnThread, 98 benchmark_instrumentation::kRunRasterOnThread,
96 benchmark_instrumentation::kData, 99 benchmark_instrumentation::kData,
97 TracedValue::FromValue(DataAsValue().release()), 100 TracedValue::FromValue(DataAsValue().release()),
98 "raster_mode", 101 "raster_mode",
99 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release())); 102 TracedValue::FromValue(RasterModeAsValue(raster_mode_).release()));
100 103
101 devtools_instrumentation::ScopedLayerTask raster_task( 104 devtools_instrumentation::ScopedLayerTask raster_task(
102 devtools_instrumentation::kRasterTask, layer_id_); 105 devtools_instrumentation::kRasterTask, layer_id_);
103 106
104 DCHECK(picture_pile_.get()); 107 DCHECK(picture_pile_.get());
105 DCHECK(device);
106 108
107 if (analysis_.is_solid_color) 109 if (analysis_.is_solid_color)
108 return false; 110 return false;
109 111
110 PicturePileImpl* picture_clone = 112 PicturePileImpl* picture_clone =
111 picture_pile_->GetCloneForDrawingOnThread(thread_index); 113 picture_pile_->GetCloneForDrawingOnThread(thread_index);
112 114
113 SkCanvas canvas(device); 115 SkBitmap bitmap_32;
116 bitmap_32.setConfig(SkBitmap::kARGB_8888_Config,
117 size.width(),
118 size.height());
119 bitmap_32.allocPixels();
120 SkDevice device_32(bitmap_32);
114 121
122 SkCanvas canvas(&device_32);
115 skia::RefPtr<SkDrawFilter> draw_filter; 123 skia::RefPtr<SkDrawFilter> draw_filter;
116 switch (raster_mode_) { 124 switch (raster_mode_) {
117 case LOW_QUALITY_RASTER_MODE: 125 case LOW_QUALITY_RASTER_MODE:
118 draw_filter = skia::AdoptRef(new skia::PaintSimplifier); 126 draw_filter = skia::AdoptRef(new skia::PaintSimplifier);
119 break; 127 break;
120 case HIGH_QUALITY_NO_LCD_RASTER_MODE: 128 case HIGH_QUALITY_NO_LCD_RASTER_MODE:
121 draw_filter = skia::AdoptRef(new DisableLCDTextFilter); 129 draw_filter = skia::AdoptRef(new DisableLCDTextFilter);
122 break; 130 break;
123 case HIGH_QUALITY_RASTER_MODE: 131 case HIGH_QUALITY_RASTER_MODE:
124 break; 132 break;
(...skipping 17 matching lines...) Expand all
142 HISTOGRAM_CUSTOM_COUNTS( 150 HISTOGRAM_CUSTOM_COUNTS(
143 "Renderer4.PictureRasterTimeUS", 151 "Renderer4.PictureRasterTimeUS",
144 raster_stats.total_rasterize_time.InMicroseconds(), 152 raster_stats.total_rasterize_time.InMicroseconds(),
145 0, 153 0,
146 100000, 154 100000,
147 100); 155 100);
148 } else { 156 } else {
149 picture_clone->RasterToBitmap( 157 picture_clone->RasterToBitmap(
150 &canvas, content_rect_, contents_scale_, NULL); 158 &canvas, content_rect_, contents_scale_, NULL);
151 } 159 }
160
161 if (use_16bit_tiles_) {
162 LOG(ERROR) << "KAANB: copying over to 16-bits";
163 SkBitmap bitmap_16;
164 bitmap_16.setPixels(buffer);
165 bitmap_32.copyTo(&bitmap_16, SkBitmap::kARGB_4444_Config);
166 }
167
152 return true; 168 return true;
153 } 169 }
154 170
155 // Overridden from internal::RasterWorkerPoolTask: 171 // Overridden from internal::RasterWorkerPoolTask:
156 virtual bool RunOnWorkerThread(SkDevice* device, unsigned thread_index) 172 virtual bool RunOnWorkerThread(unsigned thread_index,
173 void* buffer, gfx::Size size)
157 OVERRIDE { 174 OVERRIDE {
158 RunAnalysisOnThread(thread_index); 175 RunAnalysisOnThread(thread_index);
159 return RunRasterOnThread(device, thread_index); 176 return RunRasterOnThread(thread_index, buffer, size);
160 } 177 }
161 virtual void CompleteOnOriginThread() OVERRIDE { 178 virtual void CompleteOnOriginThread() OVERRIDE {
162 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled()); 179 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled());
163 } 180 }
164 181
165 protected: 182 protected:
166 virtual ~RasterWorkerPoolTaskImpl() {} 183 virtual ~RasterWorkerPoolTaskImpl() {}
167 184
168 private: 185 private:
169 scoped_ptr<base::Value> DataAsValue() const { 186 scoped_ptr<base::Value> DataAsValue() const {
(...skipping 12 matching lines...) Expand all
182 gfx::Rect content_rect_; 199 gfx::Rect content_rect_;
183 float contents_scale_; 200 float contents_scale_;
184 RasterMode raster_mode_; 201 RasterMode raster_mode_;
185 bool is_tile_in_pending_tree_now_bin_; 202 bool is_tile_in_pending_tree_now_bin_;
186 TileResolution tile_resolution_; 203 TileResolution tile_resolution_;
187 int layer_id_; 204 int layer_id_;
188 const void* tile_id_; 205 const void* tile_id_;
189 int source_frame_number_; 206 int source_frame_number_;
190 RenderingStatsInstrumentation* rendering_stats_; 207 RenderingStatsInstrumentation* rendering_stats_;
191 const RasterWorkerPool::RasterTask::Reply reply_; 208 const RasterWorkerPool::RasterTask::Reply reply_;
209 bool use_16bit_tiles_;
192 210
193 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); 211 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl);
194 }; 212 };
195 213
196 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { 214 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask {
197 public: 215 public:
198 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref, 216 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref,
199 int layer_id, 217 int layer_id,
200 RenderingStatsInstrumentation* rendering_stats, 218 RenderingStatsInstrumentation* rendering_stats,
201 const RasterWorkerPool::Task::Reply& reply) 219 const RasterWorkerPool::Task::Reply& reply)
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 gfx::Rect content_rect, 390 gfx::Rect content_rect,
373 float contents_scale, 391 float contents_scale,
374 RasterMode raster_mode, 392 RasterMode raster_mode,
375 bool is_tile_in_pending_tree_now_bin, 393 bool is_tile_in_pending_tree_now_bin,
376 TileResolution tile_resolution, 394 TileResolution tile_resolution,
377 int layer_id, 395 int layer_id,
378 const void* tile_id, 396 const void* tile_id,
379 int source_frame_number, 397 int source_frame_number,
380 RenderingStatsInstrumentation* rendering_stats, 398 RenderingStatsInstrumentation* rendering_stats,
381 const RasterTask::Reply& reply, 399 const RasterTask::Reply& reply,
382 Task::Set* dependencies) { 400 Task::Set* dependencies,
401 bool use_16bit_tiles) {
383 return RasterTask( 402 return RasterTask(
384 new RasterWorkerPoolTaskImpl(resource, 403 new RasterWorkerPoolTaskImpl(resource,
385 picture_pile, 404 picture_pile,
386 content_rect, 405 content_rect,
387 contents_scale, 406 contents_scale,
388 raster_mode, 407 raster_mode,
389 is_tile_in_pending_tree_now_bin, 408 is_tile_in_pending_tree_now_bin,
390 tile_resolution, 409 tile_resolution,
391 layer_id, 410 layer_id,
392 tile_id, 411 tile_id,
393 source_frame_number, 412 source_frame_number,
394 rendering_stats, 413 rendering_stats,
395 reply, 414 reply,
396 &dependencies->tasks_)); 415 &dependencies->tasks_,
416 use_16bit_tiles));
397 } 417 }
398 418
399 // static 419 // static
400 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask( 420 RasterWorkerPool::Task RasterWorkerPool::CreateImageDecodeTask(
401 skia::LazyPixelRef* pixel_ref, 421 skia::LazyPixelRef* pixel_ref,
402 int layer_id, 422 int layer_id,
403 RenderingStatsInstrumentation* stats_instrumentation, 423 RenderingStatsInstrumentation* stats_instrumentation,
404 const Task::Reply& reply) { 424 const Task::Reply& reply) {
405 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref, 425 return Task(new ImageDecodeWorkerPoolTaskImpl(pixel_ref,
406 layer_id, 426 layer_id,
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 554
535 internal::GraphNode* decode_node = CreateGraphNodeForTask( 555 internal::GraphNode* decode_node = CreateGraphNodeForTask(
536 decode_task, priority, graph); 556 decode_task, priority, graph);
537 decode_node->add_dependent(raster_node); 557 decode_node->add_dependent(raster_node);
538 } 558 }
539 559
540 return raster_node; 560 return raster_node;
541 } 561 }
542 562
543 } // namespace cc 563 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698