summaryrefslogtreecommitdiff
path: root/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h')
-rw-r--r--chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
index 863b4b8b998..8317b21c9e6 100644
--- a/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
+++ b/chromium/components/viz/service/frame_sinks/compositor_frame_sink_support.h
@@ -11,6 +11,7 @@
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
+#include "base/optional.h"
#include "base/time/time.h"
#include "components/viz/common/frame_sinks/begin_frame_source.h"
#include "components/viz/common/quads/compositor_frame.h"
@@ -110,7 +111,7 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
void SubmitCompositorFrame(
const LocalSurfaceId& local_surface_id,
CompositorFrame frame,
- mojom::HitTestRegionListPtr hit_test_region_list = nullptr,
+ base::Optional<HitTestRegionList> hit_test_region_list = base::nullopt,
uint64_t submit_time = 0);
// Returns false if the notification was not valid (a duplicate).
bool DidAllocateSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
@@ -130,7 +131,8 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
SubmitResult MaybeSubmitCompositorFrame(
const LocalSurfaceId& local_surface_id,
CompositorFrame frame,
- mojom::HitTestRegionListPtr hit_test_region_list);
+ base::Optional<HitTestRegionList> hit_test_region_list,
+ mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback);
// CapturableFrameSink implementation.
void AttachCaptureClient(CapturableFrameSink::Client* client) override;
@@ -138,6 +140,7 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
gfx::Size GetActiveFrameSize() override;
void RequestCopyOfOutput(const LocalSurfaceId& local_surface_id,
std::unique_ptr<CopyOutputRequest> request) override;
+ const CompositorFrameMetadata* GetLastActivatedFrameMetadata() override;
HitTestAggregator* GetHitTestAggregator();
@@ -183,10 +186,14 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
Surface* CreateSurface(const SurfaceInfo& surface_info);
void OnAggregatedDamage(const LocalSurfaceId& local_surface_id,
- const gfx::Size& frame_size_in_pixels,
+ const CompositorFrame& frame,
const gfx::Rect& damage_rect,
base::TimeTicks expected_display_time) const;
+ // For the sync API calls, if we are blocking a client callback, runs it once
+ // BeginFrame and FrameAck are done.
+ void HandleCallback();
+
mojom::CompositorFrameSinkClient* const client_;
FrameSinkManagerImpl* const frame_sink_manager_;
@@ -218,7 +225,7 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
BeginFrameArgs last_begin_frame_args_;
// Whether a request for begin frames has been issued.
- bool needs_begin_frame_ = false;
+ bool client_needs_begin_frame_ = false;
// Whether or not a frame observer has been added.
bool added_frame_observer_ = false;
@@ -263,6 +270,11 @@ class VIZ_SERVICE_EXPORT CompositorFrameSinkSupport
std::vector<std::pair<LocalSurfaceId, std::unique_ptr<CopyOutputRequest>>>
copy_output_requests_;
+ mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback
+ compositor_frame_callback_;
+ bool callback_received_begin_frame_ = true;
+ bool callback_received_receive_ack_ = true;
+
base::WeakPtrFactory<CompositorFrameSinkSupport> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(CompositorFrameSinkSupport);