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(
weak_factory_.GetWeakPtr()));
}
#if defined(OS_ANDROID)
void RenderFrameMetadataProviderImpl::OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) {
for (Observer& observer : observers_)
observer.OnRootScrollOffsetChanged(root_scroll_offset);
}
#endif
} // namespace content
......@@ -76,8 +76,10 @@ class CONTENT_EXPORT RenderFrameMetadataProviderImpl
uint32_t frame_token,
const cc::RenderFrameMetadata& metadata) override;
void OnFrameSubmissionForTesting(uint32_t frame_token) override;
#if defined(OS_ANDROID)
void OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) override;
#endif
base::ObserverList<Observer>::Unchecked observers_;
......
......@@ -135,5 +135,6 @@ interface RenderFrameMetadataObserverClient {
// Only called if ReportAllRootScrolls(true) has been called. See
// ReportAllRootScrolls() for details.
[EnableIf=is_android]
OnRootScrollOffsetChanged(gfx.mojom.Vector2dF root_scroll_offset);
};
......@@ -6,6 +6,7 @@
#define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_METADATA_PROVIDER_H_
#include "base/macros.h"
#include "build/build_config.h"
#include "cc/trees/render_frame_metadata.h"
#include "content/common/content_export.h"
......@@ -40,8 +41,10 @@ class CONTENT_EXPORT RenderFrameMetadataProvider {
// to pass in Viz.
virtual void OnLocalSurfaceIdChanged(
const cc::RenderFrameMetadata& metadata) = 0;
#if defined(OS_ANDROID)
virtual void OnRootScrollOffsetChanged(
const gfx::Vector2dF& root_scroll_offset) {}
#endif
};
RenderFrameMetadataProvider() = default;
......
......@@ -58,11 +58,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission(
send_metadata |= force_send;
}
#if defined(OS_ANDROID)
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 !=
render_frame_metadata.root_scroll_offset &&
render_frame_metadata.root_scroll_offset.has_value();
#endif
// Always cache the full metadata, so that it can correctly be sent upon
// ReportAllFrameSubmissionsForTesting or on android, which notifies on any
......@@ -103,11 +106,14 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission(
? metadata_copy.local_surface_id_allocation->local_surface_id()
.ToString()
: "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.root_scroll_offset);
}
#endif
// Always cache the initial frame token, so that if a test connects later on
// it can be notified of the initial state.
......
......@@ -42,7 +42,9 @@ class MockRenderFrameMetadataObserverClient
void(uint32_t frame_token,
const cc::RenderFrameMetadata& metadata));
MOCK_METHOD1(OnFrameSubmissionForTesting, void(uint32_t frame_token));
#if defined(OS_ANDROID)
MOCK_METHOD1(OnRootScrollOffsetChanged, void(const gfx::Vector2dF& offset));
#endif
private:
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