OLD | NEW |
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/raster_worker_pool.h" | 5 #include "cc/raster_worker_pool.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 SkDevice device(bitmap); | 31 SkDevice device(bitmap); |
32 SkCanvas canvas(&device); | 32 SkCanvas canvas(&device); |
33 picture_pile->Raster(&canvas, rect, contents_scale, stats); | 33 picture_pile->Raster(&canvas, rect, contents_scale, stats); |
34 } | 34 } |
35 | 35 |
36 void RunImageDecodeTask(skia::LazyPixelRef* pixel_ref, RenderingStats* stats) { | 36 void RunImageDecodeTask(skia::LazyPixelRef* pixel_ref, RenderingStats* stats) { |
37 TRACE_EVENT0("cc", "RunImageDecodeTask"); | 37 TRACE_EVENT0("cc", "RunImageDecodeTask"); |
38 base::TimeTicks decode_begin_time = base::TimeTicks::Now(); | 38 base::TimeTicks decode_begin_time = base::TimeTicks::Now(); |
39 pixel_ref->Decode(); | 39 pixel_ref->Decode(); |
40 stats->totalDeferredImageDecodeCount++; | 40 stats->totalDeferredImageDecodeCount++; |
41 stats->totalDeferredImageDecodeTimeInSeconds += | 41 stats->totalDeferredImageDecodeTime += |
42 (base::TimeTicks::Now() - decode_begin_time).InSecondsF(); | 42 base::TimeTicks::Now() - decode_begin_time; |
43 } | 43 } |
44 | 44 |
45 const char* kRasterThreadNamePrefix = "CompositorRaster"; | 45 const char* kRasterThreadNamePrefix = "CompositorRaster"; |
46 | 46 |
47 // Allow two pending raster tasks per thread. This keeps resource usage | 47 // Allow two pending raster tasks per thread. This keeps resource usage |
48 // low while making sure raster threads aren't unnecessarily idle. | 48 // low while making sure raster threads aren't unnecessarily idle. |
49 const int kNumPendingRasterTasksPerThread = 2; | 49 const int kNumPendingRasterTasksPerThread = 2; |
50 | 50 |
51 } // namespace | 51 } // namespace |
52 | 52 |
53 RasterWorkerPool::Thread::Task::Task(Thread* thread) : thread_(thread) { | 53 RasterWorkerPool::Thread::Task::Task(Thread* thread) : thread_(thread) { |
54 thread_->num_pending_tasks_++; | 54 thread_->num_pending_tasks_++; |
55 } | 55 } |
56 | 56 |
57 RasterWorkerPool::Thread::Task::~Task() { | 57 RasterWorkerPool::Thread::Task::~Task() { |
58 thread_->rendering_stats_.totalRasterizeTimeInSeconds += | 58 thread_->rendering_stats_.totalRasterizeTime += |
59 rendering_stats_.totalRasterizeTimeInSeconds; | 59 rendering_stats_.totalRasterizeTime; |
60 thread_->rendering_stats_.totalPixelsRasterized += | 60 thread_->rendering_stats_.totalPixelsRasterized += |
61 rendering_stats_.totalPixelsRasterized; | 61 rendering_stats_.totalPixelsRasterized; |
62 thread_->rendering_stats_.totalDeferredImageDecodeTimeInSeconds += | 62 thread_->rendering_stats_.totalDeferredImageDecodeTime += |
63 rendering_stats_.totalDeferredImageDecodeTimeInSeconds; | 63 rendering_stats_.totalDeferredImageDecodeTime; |
64 thread_->rendering_stats_.totalDeferredImageDecodeCount += | 64 thread_->rendering_stats_.totalDeferredImageDecodeCount += |
65 rendering_stats_.totalDeferredImageDecodeCount; | 65 rendering_stats_.totalDeferredImageDecodeCount; |
66 | 66 |
67 thread_->num_pending_tasks_--; | 67 thread_->num_pending_tasks_--; |
68 } | 68 } |
69 | 69 |
70 RasterWorkerPool::Thread::Thread(const std::string name) | 70 RasterWorkerPool::Thread::Thread(const std::string name) |
71 : base::Thread(name.c_str()), | 71 : base::Thread(name.c_str()), |
72 num_pending_tasks_(0) { | 72 num_pending_tasks_(0) { |
73 Start(); | 73 Start(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 task->thread_->message_loop_proxy()->PostTaskAndReply( | 129 task->thread_->message_loop_proxy()->PostTaskAndReply( |
130 FROM_HERE, | 130 FROM_HERE, |
131 base::Bind(&RunImageDecodeTask, pixel_ref, &task->rendering_stats_), | 131 base::Bind(&RunImageDecodeTask, pixel_ref, &task->rendering_stats_), |
132 base::Bind(&RasterWorkerPool::OnTaskCompleted, | 132 base::Bind(&RasterWorkerPool::OnTaskCompleted, |
133 base::Unretained(this), | 133 base::Unretained(this), |
134 base::Unretained(task), | 134 base::Unretained(task), |
135 reply)); | 135 reply)); |
136 } | 136 } |
137 | 137 |
138 void RasterWorkerPool::GetRenderingStats(RenderingStats* stats) { | 138 void RasterWorkerPool::GetRenderingStats(RenderingStats* stats) { |
139 stats->totalRasterizeTimeInSeconds = 0; | 139 stats->totalRasterizeTime = base::TimeDelta(); |
140 stats->totalPixelsRasterized = 0; | 140 stats->totalPixelsRasterized = 0; |
141 stats->totalDeferredImageDecodeCount = 0; | 141 stats->totalDeferredImageDecodeCount = 0; |
142 stats->totalDeferredImageDecodeTimeInSeconds = 0; | 142 stats->totalDeferredImageDecodeTime = base::TimeDelta(); |
143 for (ThreadVector::iterator it = raster_threads_.begin(); | 143 for (ThreadVector::iterator it = raster_threads_.begin(); |
144 it != raster_threads_.end(); ++it) { | 144 it != raster_threads_.end(); ++it) { |
145 Thread* thread = *it; | 145 Thread* thread = *it; |
146 stats->totalRasterizeTimeInSeconds += | 146 stats->totalRasterizeTime += |
147 thread->rendering_stats().totalRasterizeTimeInSeconds; | 147 thread->rendering_stats().totalRasterizeTime; |
148 stats->totalPixelsRasterized += | 148 stats->totalPixelsRasterized += |
149 thread->rendering_stats().totalPixelsRasterized; | 149 thread->rendering_stats().totalPixelsRasterized; |
150 stats->totalDeferredImageDecodeCount += | 150 stats->totalDeferredImageDecodeCount += |
151 thread->rendering_stats().totalDeferredImageDecodeCount; | 151 thread->rendering_stats().totalDeferredImageDecodeCount; |
152 stats->totalDeferredImageDecodeTimeInSeconds += | 152 stats->totalDeferredImageDecodeTime += |
153 thread->rendering_stats().totalDeferredImageDecodeTimeInSeconds; | 153 thread->rendering_stats().totalDeferredImageDecodeTime; |
154 } | 154 } |
155 } | 155 } |
156 | 156 |
157 RasterWorkerPool::Thread::Task* RasterWorkerPool::CreateTask() { | 157 RasterWorkerPool::Thread::Task* RasterWorkerPool::CreateTask() { |
158 Thread* thread = raster_threads_.front(); | 158 Thread* thread = raster_threads_.front(); |
159 DCHECK(thread->num_pending_tasks() < kNumPendingRasterTasksPerThread); | 159 DCHECK(thread->num_pending_tasks() < kNumPendingRasterTasksPerThread); |
160 | 160 |
161 scoped_ptr<Thread::Task> task(new Thread::Task(thread)); | 161 scoped_ptr<Thread::Task> task(new Thread::Task(thread)); |
162 std::sort(raster_threads_.begin(), raster_threads_.end(), | 162 std::sort(raster_threads_.begin(), raster_threads_.end(), |
163 PendingTaskComparator()); | 163 PendingTaskComparator()); |
(...skipping 13 matching lines...) Expand all Loading... |
177 } | 177 } |
178 | 178 |
179 void RasterWorkerPool::OnRasterTaskCompleted( | 179 void RasterWorkerPool::OnRasterTaskCompleted( |
180 Thread::Task* task, | 180 Thread::Task* task, |
181 scoped_refptr<PicturePileImpl> picture_pile, | 181 scoped_refptr<PicturePileImpl> picture_pile, |
182 const base::Closure& reply) { | 182 const base::Closure& reply) { |
183 OnTaskCompleted(task, reply); | 183 OnTaskCompleted(task, reply); |
184 } | 184 } |
185 | 185 |
186 } // namespace cc | 186 } // namespace cc |
OLD | NEW |