telemetry: Add a new tilings page to tough compositor cases.
[chromium-blink-merge.git] / ppapi / shared_impl / ppb_video_decoder_shared.h
blobe08493e9976617e7ad383e51090f3526f477774c
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
3 // found in the LICENSE file.
5 #ifndef PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_
6 #define PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_
8 #include <map>
9 #include <vector>
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "ppapi/c/dev/ppb_video_decoder_dev.h"
14 #include "ppapi/shared_impl/resource.h"
15 #include "ppapi/shared_impl/tracked_callback.h"
16 #include "ppapi/thunk/ppb_video_decoder_dev_api.h"
18 namespace gpu {
19 namespace gles2 {
20 class GLES2Implementation;
21 } // namespace gles2
22 } // namespace gpu
24 namespace ppapi {
26 // Implements the logic to set and run callbacks for various video decoder
27 // events. Both the proxy and the renderer implementation share this code.
28 class PPAPI_SHARED_EXPORT PPB_VideoDecoder_Shared
29 : public Resource,
30 NON_EXPORTED_BASE(public thunk::PPB_VideoDecoder_Dev_API) {
31 public:
32 explicit PPB_VideoDecoder_Shared(PP_Instance instance);
33 explicit PPB_VideoDecoder_Shared(const HostResource& host_resource);
34 virtual ~PPB_VideoDecoder_Shared();
36 // Resource overrides.
37 virtual thunk::PPB_VideoDecoder_Dev_API* AsPPB_VideoDecoder_Dev_API()
38 override;
40 // PPB_VideoDecoder_Dev_API implementation.
41 virtual void Destroy() override;
43 protected:
44 bool SetFlushCallback(scoped_refptr<TrackedCallback> callback);
45 bool SetResetCallback(scoped_refptr<TrackedCallback> callback);
46 bool SetBitstreamBufferCallback(int32 bitstream_buffer_id,
47 scoped_refptr<TrackedCallback> callback);
49 void RunFlushCallback(int32 result);
50 void RunResetCallback(int32 result);
51 void RunBitstreamBufferCallback(int32 bitstream_buffer_id, int32 result);
53 // Tell command buffer to process all commands it has received so far.
54 void FlushCommandBuffer();
56 // Initialize the underlying decoder.
57 void InitCommon(PP_Resource graphics_context,
58 gpu::gles2::GLES2Implementation* gles2_impl);
60 private:
61 // Key: bitstream_buffer_id, value: callback to run when bitstream decode is
62 // done.
63 typedef std::map<int32, scoped_refptr<TrackedCallback> > CallbackById;
65 scoped_refptr<TrackedCallback> flush_callback_;
66 scoped_refptr<TrackedCallback> reset_callback_;
67 CallbackById bitstream_buffer_callbacks_;
69 // The resource ID of the underlying Graphics3D object being used. Used only
70 // for reference counting to keep it alive for the lifetime of |*this|.
71 PP_Resource graphics_context_;
73 // Reference to the GLES2Implementation owned by |graphics_context_|.
74 // Graphics3D is guaranteed to be alive for the lifetime of this class.
75 // In the out-of-process case, Graphics3D's gles2_impl() exists in the plugin
76 // process only, so gles2_impl_ is NULL in that case.
77 gpu::gles2::GLES2Implementation* gles2_impl_;
79 DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared);
82 } // namespace ppapi
84 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_