Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / cc / resources / one_copy_raster_worker_pool.h
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_ONE_COPY_RASTER_WORKER_POOL_H_
6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_
7
8 #include "base/memory/weak_ptr.h"
9 #include "base/values.h"
10 #include "cc/output/context_provider.h"
11 #include "cc/resources/raster_worker_pool.h"
12 #include "cc/resources/rasterizer.h"
13
14 namespace base {
15 namespace debug {
16 class ConvertableToTraceFormat;
17 class TracedValue;
18 }
19 }
20
21 namespace cc {
22 class ResourcePool;
23 class ResourceProvider;
24 class ScopedResource;
25
26 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool,
27                                           public Rasterizer,
28                                           public RasterizerTaskClient {
29  public:
30   virtual ~OneCopyRasterWorkerPool();
31
32   static scoped_ptr<RasterWorkerPool> Create(
33       base::SequencedTaskRunner* task_runner,
34       TaskGraphRunner* task_graph_runner,
35       ContextProvider* context_provider,
36       ResourceProvider* resource_provider,
37       ResourcePool* resource_pool);
38
39   // Overridden from RasterWorkerPool:
40   virtual Rasterizer* AsRasterizer() OVERRIDE;
41
42   // Overridden from Rasterizer:
43   virtual void SetClient(RasterizerClient* client) OVERRIDE;
44   virtual void Shutdown() OVERRIDE;
45   virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
46   virtual void CheckForCompletedTasks() OVERRIDE;
47
48   // Overridden from RasterizerTaskClient:
49   virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster(
50       const Resource* resource) OVERRIDE;
51   virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE;
52
53  protected:
54   OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner,
55                           TaskGraphRunner* task_graph_runner,
56                           ContextProvider* context_provider,
57                           ResourceProvider* resource_provider,
58                           ResourcePool* resource_pool);
59
60  private:
61   void OnRasterFinished(TaskSet task_set);
62   scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
63   void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
64
65   scoped_refptr<base::SequencedTaskRunner> task_runner_;
66   TaskGraphRunner* task_graph_runner_;
67   const NamespaceToken namespace_token_;
68   RasterizerClient* client_;
69   ContextProvider* context_provider_;
70   ResourceProvider* resource_provider_;
71   ResourcePool* resource_pool_;
72   TaskSetCollection raster_pending_;
73   scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets];
74
75   // Task graph used when scheduling tasks and vector used to gather
76   // completed tasks.
77   TaskGraph graph_;
78   Task::Vector completed_tasks_;
79
80   base::WeakPtrFactory<OneCopyRasterWorkerPool>
81       raster_finished_weak_ptr_factory_;
82
83   DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool);
84 };
85
86 }  // namespace cc
87
88 #endif  // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_