Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81cce37d authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Restore final canvas state after deferred flush" into jb-mr2-dev

parents c1b40c79 a4e16c58
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -399,12 +399,13 @@ class GLES20Canvas extends HardwareCanvas {
    ///////////////////////////////////////////////////////////////////////////
    
    void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
        layer.setLayerPaint(paint);

        final GLES20Layer glLayer = (GLES20Layer) layer;
        final int nativePaint = paint == null ? 0 : paint.mNativePaint;
        nDrawLayer(mRenderer, glLayer.getLayer(), x, y, nativePaint);
        nDrawLayer(mRenderer, glLayer.getLayer(), x, y);
    }

    private static native void nDrawLayer(int renderer, int layer, float x, float y, int paint);
    private static native void nDrawLayer(int renderer, int layer, float x, float y);

    void interrupt() {
        nInterrupt(mRenderer);
+2 −3
Original line number Diff line number Diff line
@@ -868,8 +868,7 @@ static void android_view_GLES20Canvas_destroyLayerDeferred(JNIEnv* env,
}

static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y, SkPaint* paint) {
    // TODO: don't pass the paint from java
        OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y) {
    renderer->drawLayer(layer, x, y);
}

@@ -1051,7 +1050,7 @@ static JNINativeMethod gMethods[] = {
    { "nClearLayerTexture",      "(I)V",       (void*) android_view_GLES20Canvas_clearLayerTexture },
    { "nDestroyLayer",           "(I)V",       (void*) android_view_GLES20Canvas_destroyLayer },
    { "nDestroyLayerDeferred",   "(I)V",       (void*) android_view_GLES20Canvas_destroyLayerDeferred },
    { "nDrawLayer",              "(IIFFI)V",   (void*) android_view_GLES20Canvas_drawLayer },
    { "nDrawLayer",              "(IIFF)V",    (void*) android_view_GLES20Canvas_drawLayer },
    { "nCopyLayer",              "(II)Z",      (void*) android_view_GLES20Canvas_copyLayer },
    { "nClearLayerUpdates",      "(I)V",       (void*) android_view_GLES20Canvas_clearLayerUpdates },
    { "nPushLayerUpdate",        "(II)V",      (void*) android_view_GLES20Canvas_pushLayerUpdate },
+6 −1
Original line number Diff line number Diff line
@@ -368,13 +368,18 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
    status_t status = DrawGlInfo::kStatusDone;

    if (isEmpty()) return status; // nothing to flush
    renderer.restoreToCount(1);

    DEFER_LOGD("--flushing");
    renderer.eventMark("Flush");

    // save and restore (with draw modifiers) so that reordering doesn't affect final state
    DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
    renderer.restoreToCount(1);
    renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);

    status |= replayBatchList(mBatches, renderer, dirty);

    renderer.restoreToCount(1);
    renderer.setDrawModifiers(restoreDrawModifiers);

    DEFER_LOGD("--flush complete, returning %x", status);