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

Side by Side Diff: remoting/client/plugin/pepper_view.h

Issue 23440046: Remove dependency on Skia from chromoting client. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « remoting/client/plugin/chromoting_instance.cc ('k') | remoting/client/plugin/pepper_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This class is an implementation of the ChromotingView for Pepper. It is 5 // This class is an implementation of the ChromotingView for Pepper. It is
6 // callable only on the Pepper thread. 6 // callable only on the Pepper thread.
7 7
8 #ifndef REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_ 8 #ifndef REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_
9 #define REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_ 9 #define REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_
10 10
11 #include <list> 11 #include <list>
12 12
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "ppapi/cpp/graphics_2d.h" 14 #include "ppapi/cpp/graphics_2d.h"
15 #include "ppapi/cpp/view.h" 15 #include "ppapi/cpp/view.h"
16 #include "ppapi/cpp/point.h" 16 #include "ppapi/cpp/point.h"
17 #include "ppapi/utility/completion_callback_factory.h" 17 #include "ppapi/utility/completion_callback_factory.h"
18 #include "remoting/client/frame_consumer.h" 18 #include "remoting/client/frame_consumer.h"
19 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
20 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
19 21
20 namespace base { 22 namespace base {
21 class Time; 23 class Time;
22 } // namespace base 24 } // namespace base
23 25
24 namespace webrtc { 26 namespace webrtc {
25 class DesktopFrame; 27 class DesktopFrame;
26 } // namespace webrtc 28 } // namespace webrtc
27 29
28 namespace remoting { 30 namespace remoting {
29 31
30 class ChromotingInstance; 32 class ChromotingInstance;
31 class ClientContext; 33 class ClientContext;
32 class FrameProducer; 34 class FrameProducer;
33 35
34 class PepperView : public FrameConsumer { 36 class PepperView : public FrameConsumer {
35 public: 37 public:
36 // Constructs a PepperView for the |instance|. The |instance|, |context| 38 // Constructs a PepperView for the |instance|. The |instance|, |context|
37 // and |producer| must outlive this class. 39 // and |producer| must outlive this class.
38 PepperView(ChromotingInstance* instance, 40 PepperView(ChromotingInstance* instance,
39 ClientContext* context, 41 ClientContext* context,
40 FrameProducer* producer); 42 FrameProducer* producer);
41 virtual ~PepperView(); 43 virtual ~PepperView();
42 44
43 // FrameConsumer implementation. 45 // FrameConsumer implementation.
44 virtual void ApplyBuffer(const SkISize& view_size, 46 virtual void ApplyBuffer(const webrtc::DesktopSize& view_size,
45 const SkIRect& clip_area, 47 const webrtc::DesktopRect& clip_area,
46 webrtc::DesktopFrame* buffer, 48 webrtc::DesktopFrame* buffer,
47 const SkRegion& region) OVERRIDE; 49 const webrtc::DesktopRegion& region) OVERRIDE;
48 virtual void ReturnBuffer(webrtc::DesktopFrame* buffer) OVERRIDE; 50 virtual void ReturnBuffer(webrtc::DesktopFrame* buffer) OVERRIDE;
49 virtual void SetSourceSize(const SkISize& source_size, 51 virtual void SetSourceSize(const webrtc::DesktopSize& source_size,
50 const SkIPoint& dpi) OVERRIDE; 52 const webrtc::DesktopVector& dpi) OVERRIDE;
51 53
52 // Updates the PepperView's size & clipping area, taking into account the 54 // Updates the PepperView's size & clipping area, taking into account the
53 // DIP-to-device scale factor. 55 // DIP-to-device scale factor.
54 void SetView(const pp::View& view); 56 void SetView(const pp::View& view);
55 57
56 // Returns the dimensions of the most recently displayed frame, in pixels. 58 // Returns the dimensions of the most recently displayed frame, in pixels.
57 const SkISize& get_source_size() const { 59 const webrtc::DesktopSize& get_source_size() const {
58 return source_size_; 60 return source_size_;
59 } 61 }
60 62
61 // Return the dimensions of the view in Density Independent Pixels (DIPs). 63 // Return the dimensions of the view in Density Independent Pixels (DIPs).
62 // Note that there may be multiple device pixels per DIP. 64 // Note that there may be multiple device pixels per DIP.
63 const SkISize& get_view_size_dips() const { 65 const webrtc::DesktopSize& get_view_size_dips() const {
64 return dips_size_; 66 return dips_size_;
65 } 67 }
66 68
67 private: 69 private:
68 // Allocates a new frame buffer to supply to the FrameProducer to render into. 70 // Allocates a new frame buffer to supply to the FrameProducer to render into.
69 // Returns NULL if the maximum number of buffers has already been allocated. 71 // Returns NULL if the maximum number of buffers has already been allocated.
70 webrtc::DesktopFrame* AllocateBuffer(); 72 webrtc::DesktopFrame* AllocateBuffer();
71 73
72 // Frees a frame buffer previously allocated by AllocateBuffer. 74 // Frees a frame buffer previously allocated by AllocateBuffer.
73 void FreeBuffer(webrtc::DesktopFrame* buffer); 75 void FreeBuffer(webrtc::DesktopFrame* buffer);
74 76
75 // Allocates buffers and passes them to the FrameProducer to render into until 77 // Allocates buffers and passes them to the FrameProducer to render into until
76 // the maximum number of buffers are in-flight. 78 // the maximum number of buffers are in-flight.
77 void InitiateDrawing(); 79 void InitiateDrawing();
78 80
79 // Renders the parts of |buffer| identified by |region| to the view. If the 81 // Renders the parts of |buffer| identified by |region| to the view. If the
80 // clip area of the view has changed since the buffer was generated then 82 // clip area of the view has changed since the buffer was generated then
81 // FrameProducer is supplied the missed parts of |region|. The FrameProducer 83 // FrameProducer is supplied the missed parts of |region|. The FrameProducer
82 // will be supplied a new buffer when FlushBuffer() completes. 84 // will be supplied a new buffer when FlushBuffer() completes.
83 void FlushBuffer(const SkIRect& clip_area, 85 void FlushBuffer(const webrtc::DesktopRect& clip_area,
84 webrtc::DesktopFrame* buffer, 86 webrtc::DesktopFrame* buffer,
85 const SkRegion& region); 87 const webrtc::DesktopRegion& region);
86 88
87 // Handles completion of FlushBuffer(), triggering a new buffer to be 89 // Handles completion of FlushBuffer(), triggering a new buffer to be
88 // returned to FrameProducer for rendering. 90 // returned to FrameProducer for rendering.
89 void OnFlushDone(int result, 91 void OnFlushDone(int result,
90 const base::Time& paint_start, 92 const base::Time& paint_start,
91 webrtc::DesktopFrame* buffer); 93 webrtc::DesktopFrame* buffer);
92 94
93 // Reference to the creating plugin instance. Needed for interacting with 95 // Reference to the creating plugin instance. Needed for interacting with
94 // pepper. Marking explicitly as const since it must be initialized at 96 // pepper. Marking explicitly as const since it must be initialized at
95 // object creation, and never change. 97 // object creation, and never change.
96 ChromotingInstance* const instance_; 98 ChromotingInstance* const instance_;
97 99
98 // Context should be constant for the lifetime of the plugin. 100 // Context should be constant for the lifetime of the plugin.
99 ClientContext* const context_; 101 ClientContext* const context_;
100 102
101 pp::Graphics2D graphics2d_; 103 pp::Graphics2D graphics2d_;
102 104
103 FrameProducer* producer_; 105 FrameProducer* producer_;
104 106
105 // List of allocated image buffers. 107 // List of allocated image buffers.
106 std::list<webrtc::DesktopFrame*> buffers_; 108 std::list<webrtc::DesktopFrame*> buffers_;
107 109
108 // Queued buffer to paint, with clip area and dirty region in device pixels. 110 // Queued buffer to paint, with clip area and dirty region in device pixels.
109 webrtc::DesktopFrame* merge_buffer_; 111 webrtc::DesktopFrame* merge_buffer_;
110 SkIRect merge_clip_area_; 112 webrtc::DesktopRect merge_clip_area_;
111 SkRegion merge_region_; 113 webrtc::DesktopRegion merge_region_;
112 114
113 // View size in Density Independent Pixels (DIPs). 115 // View size in Density Independent Pixels (DIPs).
114 SkISize dips_size_; 116 webrtc::DesktopSize dips_size_;
115 117
116 // Scale factor from DIPs to device pixels. 118 // Scale factor from DIPs to device pixels.
117 float dips_to_device_scale_; 119 float dips_to_device_scale_;
118 120
119 // View size in output pixels. This is the size at which FrameProducer must 121 // View size in output pixels. This is the size at which FrameProducer must
120 // render frames. It usually matches the DIPs size of the view, but may match 122 // render frames. It usually matches the DIPs size of the view, but may match
121 // the size in device pixels when scaling is in effect, to reduce artefacts. 123 // the size in device pixels when scaling is in effect, to reduce artefacts.
122 SkISize view_size_; 124 webrtc::DesktopSize view_size_;
123 125
124 // Scale factor from output pixels to device pixels. 126 // Scale factor from output pixels to device pixels.
125 float dips_to_view_scale_; 127 float dips_to_view_scale_;
126 128
127 // Visible area of the view, in output pixels. 129 // Visible area of the view, in output pixels.
128 SkIRect clip_area_; 130 webrtc::DesktopRect clip_area_;
129 131
130 // Size of the most recent source frame in pixels. 132 // Size of the most recent source frame in pixels.
131 SkISize source_size_; 133 webrtc::DesktopSize source_size_;
132 134
133 // Resolution of the most recent source frame dots-per-inch. 135 // Resolution of the most recent source frame dots-per-inch.
134 SkIPoint source_dpi_; 136 webrtc::DesktopVector source_dpi_;
135 137
136 // True if there is already a Flush() pending on the Graphics2D context. 138 // True if there is already a Flush() pending on the Graphics2D context.
137 bool flush_pending_; 139 bool flush_pending_;
138 140
139 // True after Initialize() has been called, until TearDown(). 141 // True after Initialize() has been called, until TearDown().
140 bool is_initialized_; 142 bool is_initialized_;
141 143
142 // True after the first call to ApplyBuffer(). 144 // True after the first call to ApplyBuffer().
143 bool frame_received_; 145 bool frame_received_;
144 146
145 pp::CompletionCallbackFactory<PepperView> callback_factory_; 147 pp::CompletionCallbackFactory<PepperView> callback_factory_;
146 148
147 DISALLOW_COPY_AND_ASSIGN(PepperView); 149 DISALLOW_COPY_AND_ASSIGN(PepperView);
148 }; 150 };
149 151
150 } // namespace remoting 152 } // namespace remoting
151 153
152 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_ 154 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_
OLDNEW
« no previous file with comments | « remoting/client/plugin/chromoting_instance.cc ('k') | remoting/client/plugin/pepper_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698