void GLWebViewState::inval(const IntRect& rect)
{
if (m_baseLayerUpdate) {
+ // base layer isn't locked, so go ahead and issue the inval to both tiled pages
m_currentPictureCounter++;
if (!rect.isEmpty()) {
// find which tiles fall within the invalRect and mark them as dirty
rect.x(), rect.y(), rect.width(), rect.height());
}
} else {
+ // base layer is locked, so defer invalidation until unlockBaseLayerUpdate()
m_invalidateRegion.op(rect.x(), rect.y(), rect.maxX(), rect.maxY(), SkRegion::kUnion_Op);
}
TilesManager::instance()->getProfiler()->nextInval(rect, m_currentScale);
// paint the tile and the second id (B) represents the pictureSet in which the
// tile was invalidated by webkit. Thus, if A < B then tile is dirty.
//
+// Since invalidates can occur faster than a full tiled page update, the tiled
+// page is protected by a 'lock' (m_baseLayerUpdate) that is set to true to
+// defer updates to the background layer, giving the foreground time to render
+// content instead of constantly flushing with invalidates. See
+// lockBaseLayerUpdate() & unlockBaseLayerUpdate().
+//
// Painting scheduling
// -------------------
//
}
#endif
+void registerPageSwapCallback()
+{
+ m_pageSwapCallbackRegistered = true;
+}
+
void setBaseLayer(BaseLayerAndroid* layer, SkRegion& inval, bool showVisualIndicator,
bool isPictureAfterFirstLayout, bool registerPageSwapCallback)
{
GET_NATIVE_VIEW(env, obj)->setSelectionPointer(set, scale, x, y);
}
+static void nativeRegisterPageSwapCallback(JNIEnv *env, jobject obj)
+{
+ GET_NATIVE_VIEW(env, obj)->registerPageSwapCallback();
+}
+
static void nativeTileProfilingStart(JNIEnv *env, jobject obj)
{
TilesManager::instance()->getProfiler()->start();
(void*) nativeSetSelectionPointer },
{ "nativeShowCursorTimed", "()V",
(void*) nativeShowCursorTimed },
+ { "nativeRegisterPageSwapCallback", "()V",
+ (void*) nativeRegisterPageSwapCallback },
{ "nativeTileProfilingStart", "()V",
(void*) nativeTileProfilingStart },
{ "nativeTileProfilingStop", "()F",