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

Commit acdb67d2 authored by Chris Craik's avatar Chris Craik Committed by Android Git Automerger
Browse files

am 27c809db: am 81cce37d: Merge "Restore final canvas state after deferred flush" into jb-mr2-dev

* commit '27c809db':
  Restore final canvas state after deferred flush
parents 34d31fe1 27c809db
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -399,12 +399,13 @@ class GLES20Canvas extends HardwareCanvas {
    ///////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////
    
    
    void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
    void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
        layer.setLayerPaint(paint);

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


    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() {
    void interrupt() {
        nInterrupt(mRenderer);
        nInterrupt(mRenderer);
+2 −3
Original line number Original line 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,
static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
        OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y, SkPaint* paint) {
        OpenGLRenderer* renderer, Layer* layer, jfloat x, jfloat y) {
    // TODO: don't pass the paint from java
    renderer->drawLayer(layer, x, y);
    renderer->drawLayer(layer, x, y);
}
}


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


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


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


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

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

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


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