| OLD | NEW |
| 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/tile_task_worker_pool.h" | 5 #include "cc/resources/tile_task_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
| 12 #include "base/threading/simple_thread.h" | 12 #include "base/threading/simple_thread.h" |
| 13 #include "cc/base/scoped_ptr_deque.h" | 13 #include "cc/base/scoped_ptr_deque.h" |
| 14 #include "cc/resources/raster_source.h" | 14 #include "cc/resources/raster_source.h" |
| 15 #include "skia/ext/refptr.h" | 15 #include "skia/ext/refptr.h" |
| 16 #include "third_party/skia/include/core/SkCanvas.h" | 16 #include "third_party/skia/include/core/SkCanvas.h" |
| 17 #include "third_party/skia/include/core/SkSurface.h" | 17 #include "third_party/skia/include/core/SkSurface.h" |
| 18 | 18 |
| 19 namespace cc { | 19 namespace cc { |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 base::ThreadPriority g_worker_thread_priority = base::kThreadPriority_Normal; |
| 23 |
| 22 class TileTaskGraphRunner : public TaskGraphRunner, | 24 class TileTaskGraphRunner : public TaskGraphRunner, |
| 23 public base::DelegateSimpleThread::Delegate { | 25 public base::DelegateSimpleThread::Delegate { |
| 24 public: | 26 public: |
| 25 TileTaskGraphRunner() { | 27 TileTaskGraphRunner() { |
| 26 size_t num_threads = TileTaskWorkerPool::GetNumWorkerThreads(); | 28 size_t num_threads = TileTaskWorkerPool::GetNumWorkerThreads(); |
| 27 while (workers_.size() < num_threads) { | 29 while (workers_.size() < num_threads) { |
| 28 scoped_ptr<base::DelegateSimpleThread> worker = | 30 scoped_ptr<base::DelegateSimpleThread> worker = |
| 29 make_scoped_ptr(new base::DelegateSimpleThread( | 31 make_scoped_ptr(new base::DelegateSimpleThread( |
| 30 this, base::StringPrintf( | 32 this, base::StringPrintf( |
| 31 "CompositorTileWorker%u", | 33 "CompositorTileWorker%u", |
| 32 static_cast<unsigned>(workers_.size() + 1)).c_str())); | 34 static_cast<unsigned>(workers_.size() + 1)).c_str())); |
| 33 worker->Start(); | 35 worker->Start(); |
| 34 #if defined(OS_ANDROID) || defined(OS_LINUX) | 36 worker->SetThreadPriority(g_worker_thread_priority); |
| 35 worker->SetThreadPriority(base::kThreadPriority_Background); | |
| 36 #endif | |
| 37 workers_.push_back(worker.Pass()); | 37 workers_.push_back(worker.Pass()); |
| 38 } | 38 } |
| 39 } | 39 } |
| 40 | 40 |
| 41 ~TileTaskGraphRunner() override { NOTREACHED(); } | 41 ~TileTaskGraphRunner() override { NOTREACHED(); } |
| 42 | 42 |
| 43 private: | 43 private: |
| 44 // Overridden from base::DelegateSimpleThread::Delegate: | 44 // Overridden from base::DelegateSimpleThread::Delegate: |
| 45 void Run() override { TaskGraphRunner::Run(); } | 45 void Run() override { TaskGraphRunner::Run(); } |
| 46 | 46 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 113 |
| 114 // static | 114 // static |
| 115 int TileTaskWorkerPool::GetNumWorkerThreads() { | 115 int TileTaskWorkerPool::GetNumWorkerThreads() { |
| 116 if (!g_num_worker_threads) | 116 if (!g_num_worker_threads) |
| 117 g_num_worker_threads = kDefaultNumWorkerThreads; | 117 g_num_worker_threads = kDefaultNumWorkerThreads; |
| 118 | 118 |
| 119 return g_num_worker_threads; | 119 return g_num_worker_threads; |
| 120 } | 120 } |
| 121 | 121 |
| 122 // static | 122 // static |
| 123 void TileTaskWorkerPool::SetWorkerThreadPriority( |
| 124 base::ThreadPriority priority) { |
| 125 g_worker_thread_priority = priority; |
| 126 } |
| 127 |
| 128 // static |
| 123 TaskGraphRunner* TileTaskWorkerPool::GetTaskGraphRunner() { | 129 TaskGraphRunner* TileTaskWorkerPool::GetTaskGraphRunner() { |
| 124 return g_task_graph_runner.Pointer(); | 130 return g_task_graph_runner.Pointer(); |
| 125 } | 131 } |
| 126 | 132 |
| 127 // static | 133 // static |
| 128 scoped_refptr<TileTask> TileTaskWorkerPool::CreateTaskSetFinishedTask( | 134 scoped_refptr<TileTask> TileTaskWorkerPool::CreateTaskSetFinishedTask( |
| 129 base::SequencedTaskRunner* task_runner, | 135 base::SequencedTaskRunner* task_runner, |
| 130 const base::Closure& on_task_set_finished_callback) { | 136 const base::Closure& on_task_set_finished_callback) { |
| 131 return make_scoped_refptr( | 137 return make_scoped_refptr( |
| 132 new TaskSetFinishedTaskImpl(task_runner, on_task_set_finished_callback)); | 138 new TaskSetFinishedTaskImpl(task_runner, on_task_set_finished_callback)); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the | 260 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the |
| 255 // bitmap data. There will be no need to call SkAlign4 once crbug.com/293728 | 261 // bitmap data. There will be no need to call SkAlign4 once crbug.com/293728 |
| 256 // is fixed. | 262 // is fixed. |
| 257 const size_t dst_row_bytes = SkAlign4(dst_info.minRowBytes()); | 263 const size_t dst_row_bytes = SkAlign4(dst_info.minRowBytes()); |
| 258 DCHECK_EQ(0u, dst_row_bytes % 4); | 264 DCHECK_EQ(0u, dst_row_bytes % 4); |
| 259 bool success = canvas->readPixels(dst_info, memory, dst_row_bytes, 0, 0); | 265 bool success = canvas->readPixels(dst_info, memory, dst_row_bytes, 0, 0); |
| 260 DCHECK_EQ(true, success); | 266 DCHECK_EQ(true, success); |
| 261 } | 267 } |
| 262 | 268 |
| 263 } // namespace cc | 269 } // namespace cc |
| OLD | NEW |