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

Commit 81a1d2a1 authored by Chris Craik's avatar Chris Craik
Browse files

Add LinearStdAllocator

Also fixes microbench DisplayListData leak.

Change-Id: I1c46f6d0d38650327f3df90e7b278fa7765083dc
parent 10ed6921
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -254,6 +254,7 @@ LOCAL_WHOLE_STATIC_LIBRARIES := libhwui_static
LOCAL_STATIC_LIBRARIES := libbenchmark libbase

LOCAL_SRC_FILES += \
    microbench/DisplayListCanvasBench.cpp
    microbench/DisplayListCanvasBench.cpp \
    microbench/LinearAllocatorBench.cpp

include $(BUILD_EXECUTABLE)
+1 −2
Original line number Diff line number Diff line
@@ -66,8 +66,7 @@ public:
    virtual ~DisplayListCanvas();

    void reset(int width, int height);

    DisplayListData* finishRecording();
    __attribute__((warn_unused_result)) DisplayListData* finishRecording();

// ----------------------------------------------------------------------------
// HWUI Canvas state operations
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ public:
    virtual ~RecordingCanvas();

    void reset(int width, int height);
    DisplayListData* finishRecording();
    __attribute__((warn_unused_result)) DisplayListData* finishRecording();

// ----------------------------------------------------------------------------
// MISC HWUI OPERATIONS - TODO: CATEGORIZE
+6 −7
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
 */

#include <benchmark/Benchmark.h>
#include <utils/Singleton.h>

#include "DisplayList.h"
#if HWUI_NEW_OPS
@@ -59,13 +58,13 @@ void BM_DisplayListData_alloc_theoretical::Run(int iters) {
BENCHMARK_NO_ARG(BM_DisplayListCanvas_record_empty);
void BM_DisplayListCanvas_record_empty::Run(int iters) {
    TestCanvas canvas(100, 100);
    canvas.finishRecording();
    delete canvas.finishRecording();

    StartBenchmarkTiming();
    for (int i = 0; i < iters; ++i) {
        canvas.reset(100, 100);
        MicroBench::DoNotOptimize(&canvas);
        canvas.finishRecording();
        delete canvas.finishRecording();
    }
    StopBenchmarkTiming();
}
@@ -73,7 +72,7 @@ void BM_DisplayListCanvas_record_empty::Run(int iters) {
BENCHMARK_NO_ARG(BM_DisplayListCanvas_record_saverestore);
void BM_DisplayListCanvas_record_saverestore::Run(int iters) {
    TestCanvas canvas(100, 100);
    canvas.finishRecording();
    delete canvas.finishRecording();

    StartBenchmarkTiming();
    for (int i = 0; i < iters; ++i) {
@@ -83,7 +82,7 @@ void BM_DisplayListCanvas_record_saverestore::Run(int iters) {
        MicroBench::DoNotOptimize(&canvas);
        canvas.restore();
        canvas.restore();
        canvas.finishRecording();
        delete canvas.finishRecording();
    }
    StopBenchmarkTiming();
}
@@ -91,14 +90,14 @@ void BM_DisplayListCanvas_record_saverestore::Run(int iters) {
BENCHMARK_NO_ARG(BM_DisplayListCanvas_record_translate);
void BM_DisplayListCanvas_record_translate::Run(int iters) {
    TestCanvas canvas(100, 100);
    canvas.finishRecording();
    delete canvas.finishRecording();

    StartBenchmarkTiming();
    for (int i = 0; i < iters; ++i) {
        canvas.reset(100, 100);
        canvas.scale(10, 10);
        MicroBench::DoNotOptimize(&canvas);
        canvas.finishRecording();
        delete canvas.finishRecording();
    }
    StopBenchmarkTiming();
}
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 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.
 */

#include <benchmark/Benchmark.h>

#include "utils/LinearAllocator.h"
#include "microbench/MicroBench.h"

#include <vector>

using namespace android;
using namespace android::uirenderer;

BENCHMARK_NO_ARG(BM_LinearStdAllocator_vectorBaseline);
void BM_LinearStdAllocator_vectorBaseline::Run(int iters) {
    StartBenchmarkTiming();
    for (int i = 0; i < iters; i++) {
        std::vector<char> v;
        for (int j = 0; j < 200; j++) {
            v.push_back(j);
        }
        MicroBench::DoNotOptimize(&v);
    }
    StopBenchmarkTiming();
}

BENCHMARK_NO_ARG(BM_LinearStdAllocator_vector);
void BM_LinearStdAllocator_vector::Run(int iters) {
    StartBenchmarkTiming();
    for (int i = 0; i < iters; i++) {
        LinearAllocator la;
        LinearStdAllocator<void*> stdAllocator(la);
        std::vector<char, LinearStdAllocator<char> > v(stdAllocator);
        for (int j = 0; j < 200; j++) {
            v.push_back(j);
        }
        MicroBench::DoNotOptimize(&v);
    }
    StopBenchmarkTiming();
}
Loading