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

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

Issue 18233015: Abstract PPAPI's ImageData behind webrtc::DesktopFrame interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix const-correctness Created 7 years, 5 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
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/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.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 "remoting/client/frame_consumer.h" 17 #include "remoting/client/frame_consumer.h"
18 18
19 namespace base { 19 namespace base {
20 class Time; 20 class Time;
21 } // namespace base 21 } // namespace base
22 22
23 namespace webrtc {
24 class DesktopFrame;
25 } // namespace webrtc
26
23 namespace remoting { 27 namespace remoting {
24 28
25 class ChromotingInstance; 29 class ChromotingInstance;
26 class ClientContext; 30 class ClientContext;
27 class FrameProducer; 31 class FrameProducer;
28 32
29 class PepperView : public FrameConsumer, 33 class PepperView : public FrameConsumer,
30 public base::SupportsWeakPtr<PepperView> { 34 public base::SupportsWeakPtr<PepperView> {
31 public: 35 public:
32 // Constructs a PepperView for the |instance|. The |instance|, |context| 36 // Constructs a PepperView for the |instance|. The |instance|, |context|
33 // and |producer| must outlive this class. 37 // and |producer| must outlive this class.
34 PepperView(ChromotingInstance* instance, 38 PepperView(ChromotingInstance* instance,
35 ClientContext* context, 39 ClientContext* context,
36 FrameProducer* producer); 40 FrameProducer* producer);
37 virtual ~PepperView(); 41 virtual ~PepperView();
38 42
39 // FrameConsumer implementation. 43 // FrameConsumer implementation.
40 virtual void ApplyBuffer(const SkISize& view_size, 44 virtual void ApplyBuffer(const SkISize& view_size,
41 const SkIRect& clip_area, 45 const SkIRect& clip_area,
42 pp::ImageData* buffer, 46 webrtc::DesktopFrame* buffer,
43 const SkRegion& region) OVERRIDE; 47 const SkRegion& region) OVERRIDE;
44 virtual void ReturnBuffer(pp::ImageData* buffer) OVERRIDE; 48 virtual void ReturnBuffer(webrtc::DesktopFrame* buffer) OVERRIDE;
45 virtual void SetSourceSize(const SkISize& source_size, 49 virtual void SetSourceSize(const SkISize& source_size,
46 const SkIPoint& dpi) OVERRIDE; 50 const SkIPoint& dpi) OVERRIDE;
47 51
48 // Updates the PepperView's size & clipping area, taking into account the 52 // Updates the PepperView's size & clipping area, taking into account the
49 // DIP-to-device scale factor. 53 // DIP-to-device scale factor.
50 void SetView(const pp::View& view); 54 void SetView(const pp::View& view);
51 55
52 // Returns the dimensions of the most recently displayed frame, in pixels. 56 // Returns the dimensions of the most recently displayed frame, in pixels.
53 const SkISize& get_source_size() const { 57 const SkISize& get_source_size() const {
54 return source_size_; 58 return source_size_;
55 } 59 }
56 60
57 // Return the dimensions of the view in Density Independent Pixels (DIPs). 61 // Return the dimensions of the view in Density Independent Pixels (DIPs).
58 // Note that there may be multiple device pixels per DIP. 62 // Note that there may be multiple device pixels per DIP.
59 const SkISize& get_view_size_dips() const { 63 const SkISize& get_view_size_dips() const {
60 return dips_size_; 64 return dips_size_;
61 } 65 }
62 66
63 private: 67 private:
64 // Allocates a new frame buffer to supply to the FrameProducer to render into. 68 // Allocates a new frame buffer to supply to the FrameProducer to render into.
65 // Returns NULL if the maximum number of buffers has already been allocated. 69 // Returns NULL if the maximum number of buffers has already been allocated.
66 pp::ImageData* AllocateBuffer(); 70 webrtc::DesktopFrame* AllocateBuffer();
67 71
68 // Frees a frame buffer previously allocated by AllocateBuffer. 72 // Frees a frame buffer previously allocated by AllocateBuffer.
69 void FreeBuffer(pp::ImageData* buffer); 73 void FreeBuffer(webrtc::DesktopFrame* buffer);
70 74
71 // Allocates buffers and passes them to the FrameProducer to render into until 75 // Allocates buffers and passes them to the FrameProducer to render into until
72 // the maximum number of buffers are in-flight. 76 // the maximum number of buffers are in-flight.
73 void InitiateDrawing(); 77 void InitiateDrawing();
74 78
75 // Renders the parts of |buffer| identified by |region| to the view. If the 79 // Renders the parts of |buffer| identified by |region| to the view. If the
76 // clip area of the view has changed since the buffer was generated then 80 // clip area of the view has changed since the buffer was generated then
77 // FrameProducer is supplied the missed parts of |region|. The FrameProducer 81 // FrameProducer is supplied the missed parts of |region|. The FrameProducer
78 // will be supplied a new buffer when FlushBuffer() completes. 82 // will be supplied a new buffer when FlushBuffer() completes.
79 void FlushBuffer(const SkIRect& clip_area, 83 void FlushBuffer(const SkIRect& clip_area,
80 pp::ImageData* buffer, 84 webrtc::DesktopFrame* buffer,
81 const SkRegion& region); 85 const SkRegion& region);
82 86
83 // Handles completion of FlushBuffer(), triggering a new buffer to be 87 // Handles completion of FlushBuffer(), triggering a new buffer to be
84 // returned to FrameProducer for rendering. 88 // returned to FrameProducer for rendering.
85 void OnFlushDone(base::Time paint_start, pp::ImageData* buffer, int result); 89 void OnFlushDone(base::Time paint_start,
90 webrtc::DesktopFrame* buffer,
91 int result);
86 92
87 // Reference to the creating plugin instance. Needed for interacting with 93 // Reference to the creating plugin instance. Needed for interacting with
88 // pepper. Marking explicitly as const since it must be initialized at 94 // pepper. Marking explicitly as const since it must be initialized at
89 // object creation, and never change. 95 // object creation, and never change.
90 ChromotingInstance* const instance_; 96 ChromotingInstance* const instance_;
91 97
92 // Context should be constant for the lifetime of the plugin. 98 // Context should be constant for the lifetime of the plugin.
93 ClientContext* const context_; 99 ClientContext* const context_;
94 100
95 pp::Graphics2D graphics2d_; 101 pp::Graphics2D graphics2d_;
96 102
97 FrameProducer* producer_; 103 FrameProducer* producer_;
98 104
99 // List of allocated image buffers. 105 // List of allocated image buffers.
100 std::list<pp::ImageData*> buffers_; 106 std::list<webrtc::DesktopFrame*> buffers_;
101 107
102 // Queued buffer to paint, with clip area and dirty region in device pixels. 108 // Queued buffer to paint, with clip area and dirty region in device pixels.
103 pp::ImageData* merge_buffer_; 109 webrtc::DesktopFrame* merge_buffer_;
104 SkIRect merge_clip_area_; 110 SkIRect merge_clip_area_;
105 SkRegion merge_region_; 111 SkRegion merge_region_;
106 112
107 // View size in Density Independent Pixels (DIPs). 113 // View size in Density Independent Pixels (DIPs).
108 SkISize dips_size_; 114 SkISize dips_size_;
109 115
110 // Scale factor from DIPs to device pixels. 116 // Scale factor from DIPs to device pixels.
111 float dips_to_device_scale_; 117 float dips_to_device_scale_;
112 118
113 // View size in output pixels. This is the size at which FrameProducer must 119 // View size in output pixels. This is the size at which FrameProducer must
(...skipping 21 matching lines...) Expand all
135 141
136 // True after the first call to ApplyBuffer(). 142 // True after the first call to ApplyBuffer().
137 bool frame_received_; 143 bool frame_received_;
138 144
139 DISALLOW_COPY_AND_ASSIGN(PepperView); 145 DISALLOW_COPY_AND_ASSIGN(PepperView);
140 }; 146 };
141 147
142 } // namespace remoting 148 } // namespace remoting
143 149
144 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_ 150 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIEW_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698