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

Unified Diff: content/common/gpu/gpu_channel.h

Issue 1355643003: content/gpu: Remove separate queue for out-of-order messages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@stub_scheduling
Patch Set: DLOG Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/common/gpu/gpu_channel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/gpu/gpu_channel.h
diff --git a/content/common/gpu/gpu_channel.h b/content/common/gpu/gpu_channel.h
index e111924cd931d3c905c4430eb69530b83e8e2bf5..aaaa30b4532b0bb4481cc6313eb013859ae976f6 100644
--- a/content/common/gpu/gpu_channel.h
+++ b/content/common/gpu/gpu_channel.h
@@ -178,6 +178,11 @@ class CONTENT_EXPORT GpuChannel
void HandleMessage();
+ // Some messages such as WaitForGetOffsetInRange and WaitForTokenInRange are
+ // processed as soon as possible because the client is blocked until they
+ // are completed.
+ void HandleOutOfOrderMessage(const IPC::Message& msg);
+
protected:
// The message filter on the io thread.
scoped_refptr<GpuChannelMessageFilter> filter_;
@@ -300,7 +305,8 @@ class CONTENT_EXPORT GpuChannel
// - it generates mailbox names for clients of the GPU process on the IO thread.
class GpuChannelMessageFilter : public IPC::MessageFilter {
public:
- GpuChannelMessageFilter(GpuChannelMessageQueue* message_queue,
+ GpuChannelMessageFilter(const base::WeakPtr<GpuChannel>& gpu_channel,
+ GpuChannelMessageQueue* message_queue,
gpu::SyncPointManager* sync_point_manager,
base::SingleThreadTaskRunner* task_runner,
bool future_sync_points);
@@ -360,6 +366,7 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
// It is reset when we transition to IDLE.
base::TimeDelta max_preemption_time_;
+ base::WeakPtr<GpuChannel> gpu_channel_;
// The message_queue_ is used to handle messages on the main thread.
scoped_refptr<GpuChannelMessageQueue> message_queue_;
IPC::Sender* sender_;
@@ -376,9 +383,6 @@ class GpuChannelMessageFilter : public IPC::MessageFilter {
// True if this channel can create future sync points.
bool future_sync_points_;
-
- // This number is only ever incremented/read on the IO thread.
- static uint32_t global_order_counter_;
};
struct GpuChannelMessage {
@@ -390,9 +394,9 @@ struct GpuChannelMessage {
bool retire_sync_point;
uint32 sync_point;
- GpuChannelMessage(uint32_t order_num, const IPC::Message& msg)
- : order_number(order_num),
- time_received(base::TimeTicks::Now()),
+ GpuChannelMessage(const IPC::Message& msg)
+ : order_number(0),
+ time_received(base::TimeTicks()),
message(msg),
retire_sync_point(false),
sync_point(0) {}
@@ -422,12 +426,11 @@ class GpuChannelMessageQueue
// Should be called after a message returned by GetNextMessage is processed.
// Returns true if there are more messages on the queue.
- bool MessageProcessed(uint32_t order_number);
+ bool MessageProcessed();
- void PushBackMessage(uint32_t order_number, const IPC::Message& message);
+ void PushBackMessage(const IPC::Message& message);
bool GenerateSyncPointMessage(gpu::SyncPointManager* sync_point_manager,
- uint32_t order_number,
const IPC::Message& message,
bool retire_sync_point,
uint32_t* sync_point_number);
@@ -445,7 +448,8 @@ class GpuChannelMessageQueue
void PushMessageHelper(scoped_ptr<GpuChannelMessage> msg);
- bool HasQueuedMessagesHelper() const;
+ // This number is only ever incremented/read on the IO thread.
+ static uint32_t global_order_counter_;
bool enabled_;
@@ -453,9 +457,8 @@ class GpuChannelMessageQueue
uint32_t unprocessed_order_num_;
// Both deques own the messages.
std::deque<GpuChannelMessage*> channel_messages_;
- std::deque<GpuChannelMessage*> out_of_order_messages_;
- // This lock protects enabled_, unprocessed_order_num_, and both deques.
+ // This lock protects enabled_, unprocessed_order_num_, and channel_messages_.
mutable base::Lock channel_messages_lock_;
// Last finished IPC order number. Not protected by a lock as it's only
« no previous file with comments | « no previous file | content/common/gpu/gpu_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698