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

Unified Diff: android_webview/browser/browser_view_renderer.cc

Issue 256303006: Make LayerScrollOffsetDelegate updates consistent. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/browser_view_renderer.cc
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index cad7c5b96b7b331180b02aa2f79af3e91eff5daf..b131ad9f7304182316eef899664b8c5550975dbf 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -11,6 +11,7 @@
#include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
@@ -73,6 +74,27 @@ class AutoResetWithLock {
DISALLOW_COPY_AND_ASSIGN(AutoResetWithLock);
};
+class TracedValue : public base::debug::ConvertableToTraceFormat {
+ public:
+ explicit TracedValue(base::Value* value) : value_(value) {}
+ static scoped_refptr<base::debug::ConvertableToTraceFormat> FromValue(
+ base::Value* value) {
+ return scoped_refptr<base::debug::ConvertableToTraceFormat>(
+ new TracedValue(value));
+ }
+ virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE {
+ std::string tmp;
+ base::JSONWriter::Write(value_.get(), &tmp);
+ *out += tmp;
+ }
+
+ private:
+ virtual ~TracedValue() {}
+ scoped_ptr<base::Value> value_;
+
+ DISALLOW_COPY_AND_ASSIGN(TracedValue);
+};
+
} // namespace
// static
@@ -485,6 +507,14 @@ void BrowserViewRenderer::ScrollTo(gfx::Vector2d scroll_offset) {
scroll_offset_dip_ = scroll_offset_dip;
}
+ TRACE_EVENT_INSTANT2("android_webview",
+ "BrowserViewRenderer::ScrollTo",
+ TRACE_EVENT_SCOPE_THREAD,
+ "x",
+ scroll_offset_dip.x(),
+ "y",
+ scroll_offset_dip.y());
+
if (has_compositor_)
shared_renderer_state_->GetCompositor()->
DidChangeRootLayerScrollOffset();
@@ -505,35 +535,8 @@ void BrowserViewRenderer::DidUpdateContent() {
client_->OnNewPicture();
}
-void BrowserViewRenderer::SetMaxRootLayerScrollOffset(
- gfx::Vector2dF new_value_dip) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetMaxRootLayerScrollOffset,
- ui_thread_weak_ptr_,
- new_value_dip));
- return;
- }
- DCHECK_GT(dip_scale_, 0);
-
- max_scroll_offset_dip_ = new_value_dip;
- DCHECK_LE(0, max_scroll_offset_dip_.x());
- DCHECK_LE(0, max_scroll_offset_dip_.y());
-
- client_->SetMaxContainerViewScrollOffset(max_scroll_offset());
-}
-
void BrowserViewRenderer::SetTotalRootLayerScrollOffset(
gfx::Vector2dF scroll_offset_dip) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetTotalRootLayerScrollOffset,
- ui_thread_weak_ptr_,
- scroll_offset_dip));
- return;
- }
{
base::AutoLock lock(render_thread_lock_);
@@ -561,10 +564,8 @@ void BrowserViewRenderer::SetTotalRootLayerScrollOffset(
DCHECK(0 <= scroll_offset.x());
DCHECK(0 <= scroll_offset.y());
- // Disabled because the conditions are being violated while running
- // AwZoomTest.testMagnification, see http://crbug.com/340648
- // DCHECK(scroll_offset.x() <= max_offset.x());
- // DCHECK(scroll_offset.y() <= max_offset.y());
+ DCHECK(scroll_offset.x() <= max_offset.x());
+ DCHECK(scroll_offset.y() <= max_offset.y());
client_->ScrollContainerViewTo(scroll_offset);
}
@@ -583,38 +584,68 @@ bool BrowserViewRenderer::IsExternalFlingActive() const {
return client_->IsFlingActive();
}
-void BrowserViewRenderer::SetRootLayerPageScaleFactorAndLimits(
+void BrowserViewRenderer::UpdateRootLayerState(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::Vector2dF& max_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip,
float page_scale_factor,
float min_page_scale_factor,
float max_page_scale_factor) {
if (!ui_task_runner_->BelongsToCurrentThread()) {
ui_task_runner_->PostTask(
FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetRootLayerPageScaleFactorAndLimits,
+ base::Bind(&BrowserViewRenderer::UpdateRootLayerState,
ui_thread_weak_ptr_,
+ total_scroll_offset_dip,
+ max_scroll_offset_dip,
+ scrollable_size_dip,
page_scale_factor,
min_page_scale_factor,
max_page_scale_factor));
return;
}
+ TRACE_EVENT_INSTANT1(
+ "android_webview",
+ "BrowserViewRenderer::UpdateRootLayerState",
+ TRACE_EVENT_SCOPE_THREAD,
+ "state",
+ TracedValue::FromValue(
+ RootLayerStateAsValue(total_scroll_offset_dip, scrollable_size_dip)
+ .release()));
+
+ DCHECK_GT(dip_scale_, 0);
+
+ max_scroll_offset_dip_ = max_scroll_offset_dip;
+ DCHECK_LE(0, max_scroll_offset_dip_.x());
+ DCHECK_LE(0, max_scroll_offset_dip_.y());
+
page_scale_factor_ = page_scale_factor;
DCHECK_GT(page_scale_factor_, 0);
- client_->SetPageScaleFactorAndLimits(
- page_scale_factor, min_page_scale_factor, max_page_scale_factor);
- client_->SetMaxContainerViewScrollOffset(max_scroll_offset());
+
+ client_->UpdateScrollState(max_scroll_offset(),
+ scrollable_size_dip,
+ page_scale_factor,
+ min_page_scale_factor,
+ max_page_scale_factor);
+ SetTotalRootLayerScrollOffset(total_scroll_offset_dip);
}
-void BrowserViewRenderer::SetRootLayerScrollableSize(
- gfx::SizeF scrollable_size) {
- if (!ui_task_runner_->BelongsToCurrentThread()) {
- ui_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&BrowserViewRenderer::SetRootLayerScrollableSize,
- ui_thread_weak_ptr_,
- scrollable_size));
- return;
- }
- client_->SetContentsSize(scrollable_size);
+scoped_ptr<base::Value> BrowserViewRenderer::RootLayerStateAsValue(
+ const gfx::Vector2dF& total_scroll_offset_dip,
+ const gfx::SizeF& scrollable_size_dip) {
+ scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+
+ state->SetDouble("total_scroll_offset_dip.x", total_scroll_offset_dip.x());
+ state->SetDouble("total_scroll_offset_dip.y", total_scroll_offset_dip.y());
+
+ state->SetDouble("max_scroll_offset_dip.x", max_scroll_offset_dip_.x());
+ state->SetDouble("max_scroll_offset_dip.y", max_scroll_offset_dip_.y());
+
+ state->SetDouble("scrollable_size_dip.width", scrollable_size_dip.width());
+ state->SetDouble("scrollable_size_dip.height", scrollable_size_dip.height());
+
+ state->SetDouble("page_scale_factor", page_scale_factor_);
+ return state.PassAs<base::Value>();
}
void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll,
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/browser_view_renderer_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698