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

Side by Side Diff: gpu/command_buffer/service/gpu_scheduler.h

Issue 8953006: Free the command buffer when tabs are switched (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_ 5 #ifndef GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_ 6 #define GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_
7 7
8 #include <queue> 8 #include <queue>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 10 matching lines...) Expand all
21 21
22 // This class schedules commands that have been flushed. They are received via 22 // This class schedules commands that have been flushed. They are received via
23 // a command buffer and forwarded to a command parser. TODO(apatrick): This 23 // a command buffer and forwarded to a command parser. TODO(apatrick): This
24 // class should not know about the decoder. Do not add additional dependencies 24 // class should not know about the decoder. Do not add additional dependencies
25 // on it. 25 // on it.
26 class GpuScheduler 26 class GpuScheduler
27 : public CommandBufferEngine, 27 : public CommandBufferEngine,
28 public base::SupportsWeakPtr<GpuScheduler> { 28 public base::SupportsWeakPtr<GpuScheduler> {
29 public: 29 public:
30 GpuScheduler(CommandBuffer* command_buffer, 30 GpuScheduler(CommandBuffer* command_buffer,
31 gles2::GLES2Decoder* decoder, 31 AsyncAPIInterface* handler,
32 CommandParser* parser); 32 gles2::GLES2Decoder* decoder);
33 33
34 virtual ~GpuScheduler(); 34 virtual ~GpuScheduler();
35 35
36 void PutChanged(); 36 void PutChanged();
37 37
38 // Sets whether commands should be processed by this scheduler. Setting to 38 // Sets whether commands should be processed by this scheduler. Setting to
39 // false unschedules. Setting to true reschedules. Whether or not the 39 // false unschedules. Setting to true reschedules. Whether or not the
40 // scheduler is currently scheduled is "reference counted". Every call with 40 // scheduler is currently scheduled is "reference counted". Every call with
41 // false must eventually be paired by a call with true. 41 // false must eventually be paired by a call with true.
42 void SetScheduled(bool is_scheduled); 42 void SetScheduled(bool is_scheduled);
(...skipping 12 matching lines...) Expand all
55 virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE; 55 virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE;
56 virtual void set_token(int32 token) OVERRIDE; 56 virtual void set_token(int32 token) OVERRIDE;
57 virtual bool SetGetBuffer(int32 transfer_buffer_id) OVERRIDE; 57 virtual bool SetGetBuffer(int32 transfer_buffer_id) OVERRIDE;
58 virtual bool SetGetOffset(int32 offset) OVERRIDE; 58 virtual bool SetGetOffset(int32 offset) OVERRIDE;
59 virtual int32 GetGetOffset() OVERRIDE; 59 virtual int32 GetGetOffset() OVERRIDE;
60 60
61 void SetCommandProcessedCallback(const base::Closure& callback); 61 void SetCommandProcessedCallback(const base::Closure& callback);
62 62
63 void DeferToFence(base::Closure task); 63 void DeferToFence(base::Closure task);
64 64
65 CommandParser* parser() const {
66 return parser_.get();
67 }
68
65 private: 69 private:
66 // Polls the fences, invoking callbacks that were waiting to be triggered 70 // Polls the fences, invoking callbacks that were waiting to be triggered
67 // by them and returns whether all fences were complete. 71 // by them and returns whether all fences were complete.
68 bool PollUnscheduleFences(); 72 bool PollUnscheduleFences();
69 73
70 // The GpuScheduler holds a weak reference to the CommandBuffer. The 74 // The GpuScheduler holds a weak reference to the CommandBuffer. The
71 // CommandBuffer owns the GpuScheduler and holds a strong reference to it 75 // CommandBuffer owns the GpuScheduler and holds a strong reference to it
72 // through the ProcessCommands callback. 76 // through the ProcessCommands callback.
73 CommandBuffer* command_buffer_; 77 CommandBuffer* command_buffer_;
74 78
79 // The parser uses this to execute commands.
80 AsyncAPIInterface* handler_;
81
75 // Does not own decoder. TODO(apatrick): The GpuScheduler shouldn't need a 82 // Does not own decoder. TODO(apatrick): The GpuScheduler shouldn't need a
76 // pointer to the decoder, it is only used to initialize the CommandParser, 83 // pointer to the decoder, it is only used to initialize the CommandParser,
77 // which could be an argument to the constructor, and to determine the 84 // which could be an argument to the constructor, and to determine the
78 // reason for context lost. 85 // reason for context lost.
79 gles2::GLES2Decoder* decoder_; 86 gles2::GLES2Decoder* decoder_;
80 87
81 // TODO(apatrick): The GpuScheduler currently creates and owns the parser. 88 // TODO(apatrick): The GpuScheduler currently creates and owns the parser.
82 // This should be an argument to the constructor. 89 // This should be an argument to the constructor.
83 scoped_ptr<CommandParser> parser_; 90 scoped_ptr<CommandParser> parser_;
84 91
85 // Greater than zero if this is waiting to be rescheduled before continuing. 92 // Greater than zero if this is waiting to be rescheduled before continuing.
86 int unscheduled_count_; 93 int unscheduled_count_;
87 94
88 // The GpuScheduler will unschedule itself in the event that further GL calls 95 // The GpuScheduler will unschedule itself in the event that further GL calls
89 // are issued to it before all these fences have been crossed by the GPU. 96 // are issued to it before all these fences have been crossed by the GPU.
90 struct UnscheduleFence { 97 struct UnscheduleFence {
91 UnscheduleFence(); 98 UnscheduleFence();
92 ~UnscheduleFence(); 99 ~UnscheduleFence();
93 100
94 uint32 fence; 101 uint32 fence;
95 base::Closure task; 102 base::Closure task;
96 }; 103 };
97 std::queue<UnscheduleFence> unschedule_fences_; 104 std::queue<UnscheduleFence> unschedule_fences_;
98 105
99 base::Closure scheduled_callback_; 106 base::Closure scheduled_callback_;
100 base::Closure command_processed_callback_; 107 base::Closure command_processed_callback_;
108
109 DISALLOW_COPY_AND_ASSIGN(GpuScheduler);
101 }; 110 };
102 111
103 } // namespace gpu 112 } // namespace gpu
104 113
105 #endif // GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_ 114 #endif // GPU_COMMAND_BUFFER_SERVICE_GPU_SCHEDULER_H_
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/ring_buffer_test.cc ('k') | gpu/command_buffer/service/gpu_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698