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

Side by Side Diff: content/browser/renderer_host/input/input_queue.h

Issue 19220002: [WIP] BufferedInputRouter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix client assignment Created 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 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 CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_QUEUE_H_
6 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_QUEUE_H_
7
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "content/common/content_export.h"
11 #include "content/common/input/input_event_disposition.h"
12
13 namespace content {
14
15 class BrowserInputEvent;
16 class EventPacketAck;
17 class InputQueueClient;
18
19 // |InputQueue| handles browser input event batching and response.
20 // Event packets are assembled into sequential event packets. A flush entails
21 // delivery and dispatch of a single event packet, and continues until the
22 // packet is ack'ed and all its events have been dispatched to the renderer.
23 class CONTENT_EXPORT InputQueue {
24 public:
25 // The |client| should outlive the InputQueue.
26 InputQueue(InputQueueClient* client);
27 virtual ~InputQueue();
28
29 // If a flush is in progress, |event| will be dispatched in the next flush.
30 // If no flush is in progress, a flush will be requested if necessary.
31 // |event| is assumed to be both non-NULL and valid.
32 void QueueEvent(scoped_ptr<BrowserInputEvent> event);
33
34 // Initiates the flush of the pending event packet to |client_|, if necessary.
35 // This should only be called in response to |client_->SetNeedsFlush()|.
36 void BeginFlush();
37
38 // Called by the owner upon EventPacket responses from the sender target. This
39 // will dispatch event acks for events with a corresponding |ack_handler|.
40 enum AckResult {
41 ACK_OK, // |acked_packet| was processed successfully.
42 ACK_UNEXPECTED, // |acked_packet| was unexpected; no flush was in-progress.
43 ACK_INVALID, // |acked_packet| contains invalid data.
44 ACK_SHUTDOWN // |acked_packet| processing triggered queue shutdown.
45 };
46 AckResult OnEventPacketAck(int64 packet_id,
47 const InputEventDispositions& dispositions);
48
49 // Total number of evenst in the queue, both being flushed and pending flush.
50 size_t QueuedEventCount() const;
51
52 protected:
53 friend class InputQueueTest;
54
55 // Delivers |in_flush_packet_| to the client.
56 void DeliverInFlushPacket();
57
58 // Requests a flush via |client_| if the necessary request has not been made.
59 void RequestFlushIfNecessary();
60
61 // True when |in_flush_packet_| is non-empty.
62 bool FlushInProgress() const;
63
64 private:
65 InputQueueClient* client_;
66
67 // Used to assign unique, non-zero ID's to each delivered EventPacket.
68 int64 next_packet_id_;
69
70 // Avoid spamming the client with redundant flush requests.
71 bool flush_requested_;
72
73 class BrowserEventPacket;
74 scoped_ptr<BrowserEventPacket> in_flush_packet_;
75 scoped_ptr<BrowserEventPacket> pending_flush_packet_;
76
77 DISALLOW_COPY_AND_ASSIGN(InputQueue);
78 };
79
80 } // namespace content
81
82 #endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_INPUT_QUEUE_H_
OLDNEW
« no previous file with comments | « content/browser/renderer_host/input/input_ack_handler.h ('k') | content/browser/renderer_host/input/input_queue.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698