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

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: less jni Created 6 years, 8 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 937ed13259c1de75bde6d7c190b38566373c5351..e774080cb9f991d2f7319cc9d1ecf71fdf28ec05 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -10,6 +10,7 @@
#include "base/android/jni_android.h"
#include "base/auto_reset.h"
#include "base/debug/trace_event.h"
+#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/strings/stringprintf.h"
#include "content/public/browser/android/synchronous_compositor.h"
@@ -54,6 +55,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
BrowserViewRenderer::BrowserViewRenderer(
@@ -351,25 +373,6 @@ 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()) {
@@ -380,6 +383,12 @@ void BrowserViewRenderer::SetTotalRootLayerScrollOffset(
scroll_offset_dip));
return;
}
+ TRACE_EVENT2("android_webview",
+ "BrowserViewRenderer::SetTotalRootLayerScrollOffset",
+ "x",
+ scroll_offset_dip.x(),
+ "y",
+ scroll_offset_dip.y());
{
base::AutoLock lock(scroll_offset_dip_lock_);
@@ -407,10 +416,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);
}
@@ -429,38 +436,64 @@ 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;
}
+ {
+ scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
boliu 2014/04/30 05:48:42 Isn't this gonna be slow in production? I think i
mkosiba (inactive) 2014/05/01 11:13:25 Done. The main reason for adding these is that we'
+ 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);
+ state->SetDouble("min_page_scale_factor", min_page_scale_factor);
+ state->SetDouble("max_page_scale_factor", max_page_scale_factor);
+
+ TRACE_EVENT_INSTANT1("android_webview",
+ "BrowserViewRenderer::UpdateRootLayerState",
+ TRACE_EVENT_SCOPE_THREAD,
+ "state",
+ TracedValue::FromValue(state.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());
-}
-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);
+ 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::DidOverscroll(gfx::Vector2dF accumulated_overscroll,

Powered by Google App Engine
This is Rietveld 408576698