Commit be58bdab authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

content: fixs sending OnRootScrollOffsetChanged too often

OnRootScrollOffsetChanged should only be sent if all root scroll
offsets have been requested and only on android.

BUG=1100552
TEST=none

Change-Id: Ibc53cf127df0107e5ac69f9378601c9d25d357e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2283056Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785790}
parent cfe73df9
...@@ -127,10 +127,12 @@ void RenderFrameMetadataProviderImpl::OnFrameSubmissionForTesting( ...@@ -127,10 +127,12 @@ void RenderFrameMetadataProviderImpl::OnFrameSubmissionForTesting(
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
#if defined(OS_ANDROID)
void RenderFrameMetadataProviderImpl::OnRootScrollOffsetChanged( void RenderFrameMetadataProviderImpl::OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) { const gfx::Vector2dF& root_scroll_offset) {
for (Observer& observer : observers_) for (Observer& observer : observers_)
observer.OnRootScrollOffsetChanged(root_scroll_offset); observer.OnRootScrollOffsetChanged(root_scroll_offset);
} }
#endif
} // namespace content } // namespace content
...@@ -76,8 +76,10 @@ class CONTENT_EXPORT RenderFrameMetadataProviderImpl ...@@ -76,8 +76,10 @@ class CONTENT_EXPORT RenderFrameMetadataProviderImpl
uint32_t frame_token, uint32_t frame_token,
const cc::RenderFrameMetadata& metadata) override; const cc::RenderFrameMetadata& metadata) override;
void OnFrameSubmissionForTesting(uint32_t frame_token) override; void OnFrameSubmissionForTesting(uint32_t frame_token) override;
#if defined(OS_ANDROID)
void OnRootScrollOffsetChanged( void OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) override; const gfx::Vector2dF& root_scroll_offset) override;
#endif
base::ObserverList<Observer>::Unchecked observers_; base::ObserverList<Observer>::Unchecked observers_;
......
...@@ -135,5 +135,6 @@ interface RenderFrameMetadataObserverClient { ...@@ -135,5 +135,6 @@ interface RenderFrameMetadataObserverClient {
// Only called if ReportAllRootScrolls(true) has been called. See // Only called if ReportAllRootScrolls(true) has been called. See
// ReportAllRootScrolls() for details. // ReportAllRootScrolls() for details.
[EnableIf=is_android]
OnRootScrollOffsetChanged(gfx.mojom.Vector2dF root_scroll_offset); OnRootScrollOffsetChanged(gfx.mojom.Vector2dF root_scroll_offset);
}; };
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_ #define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_
#include "base/macros.h" #include "base/macros.h"
#include "build/build_config.h"
#include "cc/trees/render_frame_metadata.h" #include "cc/trees/render_frame_metadata.h"
#include "content/common/content_export.h" #include "content/common/content_export.h"
...@@ -40,8 +41,10 @@ class CONTENT_EXPORT RenderFrameMetadataProvider { ...@@ -40,8 +41,10 @@ class CONTENT_EXPORT RenderFrameMetadataProvider {
// to pass in Viz. // to pass in Viz.
virtual void OnLocalSurfaceIdChanged( virtual void OnLocalSurfaceIdChanged(
const cc::RenderFrameMetadata& metadata) = 0; const cc::RenderFrameMetadata& metadata) = 0;
#if defined(OS_ANDROID)
virtual void OnRootScrollOffsetChanged( virtual void OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) {} const gfx::Vector2dF& root_scroll_offset) {}
#endif
}; };
RenderFrameMetadataProvider() = default; RenderFrameMetadataProvider() = default;
......
...@@ -58,11 +58,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission( ...@@ -58,11 +58,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission(
send_metadata |= force_send; send_metadata |= force_send;
} }
#if defined(OS_ANDROID)
const bool send_root_scroll_offset_changed = const bool send_root_scroll_offset_changed =
!send_metadata && last_render_frame_metadata_ && report_all_root_scrolls_enabled_ && !send_metadata &&
render_frame_metadata_observer_client_ && last_render_frame_metadata_ &&
last_render_frame_metadata_->root_scroll_offset != last_render_frame_metadata_->root_scroll_offset !=
render_frame_metadata.root_scroll_offset && render_frame_metadata.root_scroll_offset &&
render_frame_metadata.root_scroll_offset.has_value(); render_frame_metadata.root_scroll_offset.has_value();
#endif
// Always cache the full metadata, so that it can correctly be sent upon // Always cache the full metadata, so that it can correctly be sent upon
// ReportAllFrameSubmissionsForTesting or on android, which notifies on any // ReportAllFrameSubmissionsForTesting or on android, which notifies on any
...@@ -103,11 +106,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission( ...@@ -103,11 +106,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission(
? metadata_copy.local_surface_id_allocation->local_surface_id() ? metadata_copy.local_surface_id_allocation->local_surface_id()
.ToString() .ToString()
: "null"); : "null");
} else if (render_frame_metadata_observer_client_ && }
send_root_scroll_offset_changed) {
#if defined(OS_ANDROID)
if (send_root_scroll_offset_changed) {
render_frame_metadata_observer_client_->OnRootScrollOffsetChanged( render_frame_metadata_observer_client_->OnRootScrollOffsetChanged(
*render_frame_metadata.root_scroll_offset); *render_frame_metadata.root_scroll_offset);
} }
#endif
// Always cache the initial frame token, so that if a test connects later on // Always cache the initial frame token, so that if a test connects later on
// it can be notified of the initial state. // it can be notified of the initial state.
......
...@@ -42,7 +42,9 @@ class MockRenderFrameMetadataObserverClient ...@@ -42,7 +42,9 @@ class MockRenderFrameMetadataObserverClient
void(uint32_t frame_token, void(uint32_t frame_token,
const cc::RenderFrameMetadata& metadata)); const cc::RenderFrameMetadata& metadata));
MOCK_METHOD1(OnFrameSubmissionForTesting, void(uint32_t frame_token)); MOCK_METHOD1(OnFrameSubmissionForTesting, void(uint32_t frame_token));
#if defined(OS_ANDROID)
MOCK_METHOD1(OnRootScrollOffsetChanged, void(const gfx::Vector2dF& offset)); MOCK_METHOD1(OnRootScrollOffsetChanged, void(const gfx::Vector2dF& offset));
#endif
private: private:
mojo::Receiver<mojom::RenderFrameMetadataObserverClient> mojo::Receiver<mojom::RenderFrameMetadataObserverClient>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment