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

Commit 96ebc6b5 authored by Romain Guy's avatar Romain Guy
Browse files

Only copy paths, paints and shaders when we need to.

Change-Id: Iba7a9c92c865f698821b6ff7bc4f502659642ac1
parent 30c46ad5
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -462,7 +462,8 @@ private:
        SkPath* pathCopy = mPathMap.valueFor(path);
        if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) {
            pathCopy = new SkPath(*path);
            mPathMap.add(path, pathCopy);
            // replaceValueFor() performs an add if the entry doesn't exist
            mPathMap.replaceValueFor(path, pathCopy);
            mPaths.add(pathCopy);
        }

@@ -478,7 +479,8 @@ private:
        SkPaint* paintCopy = mPaintMap.valueFor(paint);
        if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) {
            paintCopy = new SkPaint(*paint);
            mPaintMap.add(paint, paintCopy);
            // replaceValueFor() performs an add if the entry doesn't exist
            mPaintMap.replaceValueFor(paint, paintCopy);
            mPaints.add(paintCopy);
        }

@@ -520,7 +522,8 @@ private:
        // TODO: We also need to handle generation ID changes in compose shaders
        if (shaderCopy == NULL || shaderCopy->getGenerationId() != shader->getGenerationId()) {
            shaderCopy = shader->copy();
            mShaderMap.add(shader, shaderCopy);
            // replaceValueFor() performs an add if the entry doesn't exist
            mShaderMap.replaceValueFor(shader, shaderCopy);
            mShaders.add(shaderCopy);
            Caches::getInstance().resourceCache.incrementRefcount(shaderCopy);
        }
+9 −0
Original line number Diff line number Diff line
@@ -567,6 +567,15 @@
            </intent-filter>
        </activity>

        <activity
                android:name="PathsCacheActivity"
                android:label="_PathsCache">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
                android:name="PointsActivity"
                android:label="_Points">
+111 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.test.hwui;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.util.ArrayList;
import java.util.Random;

@SuppressWarnings({"UnusedDeclaration"})
public class PathsCacheActivity extends Activity {
    private Path mPath;

    private final Random mRandom = new Random();
    private final ArrayList<Path> mPathList = new ArrayList<Path>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mPath = makePath();

        final PathsView view = new PathsView(this);
        setContentView(view);
    }

    private Path makePath() {
        Path path = new Path();
        buildPath(path);
        return path;
    }

    private void buildPath(Path path) {
        path.moveTo(0.0f, 0.0f);
        path.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
        path.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
        path.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
    }

    public class PathsView extends View {
        private final Paint mMediumPaint;

        public PathsView(Context c) {
            super(c);

            mMediumPaint = new Paint();
            mMediumPaint.setAntiAlias(true);
            mMediumPaint.setColor(0xe00000ff);
            mMediumPaint.setStrokeWidth(10.0f);
            mMediumPaint.setStyle(Paint.Style.STROKE);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            
            Log.d("OpenGLRenderer", "Start frame");

            canvas.drawARGB(255, 255, 255, 255);

            canvas.save();
            canvas.translate(550.0f, 60.0f);
            canvas.drawPath(mPath, mMediumPaint);

            mPath.reset();
            buildPath(mPath);

            canvas.translate(30.0f, 30.0f);
            canvas.drawPath(mPath, mMediumPaint);
            canvas.drawPath(mPath, mMediumPaint);

            canvas.restore();

//            Path path = makePath();
//            int r = mRandom.nextInt(10);
//            if (r == 5 || r == 3) {
//                mPathList.add(path);
//            } else if (r == 9) {
//                mPathList.clear();
//            }
//
//            canvas.save();
//            canvas.translate(550.0f + mRandom.nextInt(50), 60.0f + mRandom.nextInt(50));
//            canvas.drawPath(path, mMediumPaint);
//            canvas.restore();
//            
            invalidate();
        }
    }
}