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

Side by Side Diff: cc/resources/pixel_buffer_raster_worker_pool.h

Issue 16190002: cc: Add new RasterWorkerPool interface. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: pass unit tests Created 7 years, 6 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_
7
8 #include <deque>
9
10 #include "base/hash_tables.h"
11 #include "cc/resources/raster_worker_pool.h"
12
13 #if defined(COMPILER_GCC)
14 namespace BASE_HASH_NAMESPACE {
15 template <> struct hash<cc::internal::RasterWorkerPoolTask*> {
16 size_t operator()(cc::internal::RasterWorkerPoolTask* ptr) const {
17 return hash<size_t>()(reinterpret_cast<size_t>(ptr));
18 }
19 };
20 } // namespace BASE_HASH_NAMESPACE
21 #endif // COMPILER
22
23 namespace cc {
24
25 class PixelBufferRasterWorkerPool : public RasterWorkerPool,
26 public WorkerPoolClient {
27 public:
28 virtual ~PixelBufferRasterWorkerPool();
29
30 static scoped_ptr<RasterWorkerPool> Create(
31 ResourceProvider* resource_provider,
32 size_t num_threads) {
33 return make_scoped_ptr<RasterWorkerPool>(
34 new PixelBufferRasterWorkerPool(resource_provider, num_threads));
35 }
36
37 // Overridden from WorkerPool:
38 virtual void Shutdown() OVERRIDE;
39 virtual void CheckForCompletedTasks() OVERRIDE;
40
41 // Overridden from RasterWorkerPool:
42 virtual void ScheduleTasks(RasterTask::Queue* queue) OVERRIDE;
43 virtual bool ForceUploadToComplete(
44 ResourceProvider::ResourceId resource_id) OVERRIDE;
45
46 private:
47 PixelBufferRasterWorkerPool(ResourceProvider* resource_provider,
48 size_t num_threads);
49
50 // Overridden from WorkerPoolClient:
51 virtual void DidFinishDispatchingWorkerPoolCompletionCallbacks() OVERRIDE;
52
53 bool CanScheduleRasterTask(internal::RasterWorkerPoolTask* task);
54 void ScheduleMoreTasks();
55 void OnRasterTaskCompleted(
56 scoped_refptr<internal::RasterWorkerPoolTask> task,
57 bool was_canceled,
58 bool need_upload);
59 void AbortPendingUploads();
60 void DidFinishRasterTask(internal::RasterWorkerPoolTask* task);
61
62 typedef internal::RasterWorkerPoolTask* TaskMapKey;
63 typedef base::hash_map<TaskMapKey,
64 scoped_refptr<internal::WorkerPoolTask> > TaskMap;
65 TaskMap pixel_buffer_tasks_;
66
67 typedef std::deque<scoped_refptr<internal::RasterWorkerPoolTask> > TaskDeque;
68 TaskDeque tasks_with_pending_upload_;
69
70 size_t bytes_pending_upload_;
71 bool has_performed_uploads_since_last_flush_;
72 bool did_dispatch_completion_callback_;
73
74 DISALLOW_COPY_AND_ASSIGN(PixelBufferRasterWorkerPool);
75 };
76
77 } // namespace cc
78
79 #endif // CC_RESOURCES_PIXEL_BUFFER_RASTER_WORKER_POOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698