• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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_GPU_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_GPU_RASTER_WORKER_POOL_H_
7 
8 #include "base/memory/weak_ptr.h"
9 #include "cc/resources/raster_worker_pool.h"
10 #include "cc/resources/rasterizer.h"
11 #include "third_party/skia/include/core/SkMultiPictureDraw.h"
12 
13 namespace cc {
14 class ContextProvider;
15 class ResourceProvider;
16 
17 class CC_EXPORT GpuRasterWorkerPool : public RasterWorkerPool,
18                                       public Rasterizer,
19                                       public RasterizerTaskClient {
20  public:
21   virtual ~GpuRasterWorkerPool();
22 
23   static scoped_ptr<RasterWorkerPool> Create(
24       base::SequencedTaskRunner* task_runner,
25       ContextProvider* context_provider,
26       ResourceProvider* resource_provider);
27 
28   // Overridden from RasterWorkerPool:
29   virtual Rasterizer* AsRasterizer() OVERRIDE;
30 
31   // Overridden from Rasterizer:
32   virtual void SetClient(RasterizerClient* client) OVERRIDE;
33   virtual void Shutdown() OVERRIDE;
34   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
35   virtual void CheckForCompletedTasks() OVERRIDE;
36 
37   // Overridden from RasterizerTaskClient:
38   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
39       const Resource* resource) OVERRIDE;
40   virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
41 
42  private:
43   GpuRasterWorkerPool(base::SequencedTaskRunner* task_runner,
44                       ContextProvider* context_provider,
45                       ResourceProvider* resource_provider);
46 
47   void OnRasterFinished(TaskSet task_set);
48   void ScheduleRunTasksOnOriginThread();
49   void RunTasksOnOriginThread();
50   void RunTaskOnOriginThread(RasterizerTask* task);
51 
52   scoped_refptr<base::SequencedTaskRunner> task_runner_;
53   scoped_ptr<TaskGraphRunner> task_graph_runner_;
54   const NamespaceToken namespace_token_;
55   RasterizerClient* client_;
56   ContextProvider* context_provider_;
57   ResourceProvider* resource_provider_;
58   SkMultiPictureDraw multi_picture_draw_;
59 
60   bool run_tasks_on_origin_thread_pending_;
61 
62   TaskSetCollection raster_pending_;
63 
64   scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
65 
66   // Task graph used when scheduling tasks and vector used to gather
67   // completed tasks.
68   TaskGraph graph_;
69   Task::Vector completed_tasks_;
70 
71   base::WeakPtrFactory<GpuRasterWorkerPool> raster_finished_weak_ptr_factory_;
72 
73   base::WeakPtrFactory<GpuRasterWorkerPool> weak_ptr_factory_;
74 
75   DISALLOW_COPY_AND_ASSIGN(GpuRasterWorkerPool);
76 };
77 
78 }  // namespace cc
79 
80 #endif  // CC_RESOURCES_GPU_RASTER_WORKER_POOL_H_
81