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

Commit b251a2f5 authored by Chris Craik's avatar Chris Craik
Browse files

Revert "Revert "TaskManager bench""

This reverts commit 9640477e.

Change-Id: I3aa8f2830b43b9c7b211c5792a311d0bc698c51a
parent 12ded41d
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -317,7 +317,8 @@ LOCAL_SRC_FILES += \
    tests/microbench/DisplayListCanvasBench.cpp \
    tests/microbench/LinearAllocatorBench.cpp \
    tests/microbench/PathParserBench.cpp \
    tests/microbench/ShadowBench.cpp
    tests/microbench/ShadowBench.cpp \
    tests/microbench/TaskManagerBench.cpp

ifeq (true, $(HWUI_NEW_OPS))
    LOCAL_SRC_FILES += \
+93 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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 "thread/Task.h"
#include "thread/TaskManager.h"
#include "thread/TaskProcessor.h"
#include "tests/microbench/MicroBench.h"

#include <vector>

using namespace android;
using namespace android::uirenderer;

class TrivialTask : public Task<char> {};

class TrivialProcessor : public TaskProcessor<char> {
public:
    TrivialProcessor(TaskManager* manager)
            : TaskProcessor(manager) {}
    virtual ~TrivialProcessor() {}
    virtual void onProcess(const sp<Task<char> >& task) override {
        TrivialTask* t = static_cast<TrivialTask*>(task.get());
        t->setResult(reinterpret_cast<intptr_t>(t) % 16 == 0 ? 'a' : 'b');
    }
};

BENCHMARK_NO_ARG(BM_TaskManager_allocateTask);
void BM_TaskManager_allocateTask::Run(int iters) {
    std::vector<sp<TrivialTask> > tasks;
    tasks.reserve(iters);

    StartBenchmarkTiming();
    for (int i = 0; i < iters; i++) {
        tasks.emplace_back(new TrivialTask);
        MicroBench::DoNotOptimize(tasks.back());
    }
    StopBenchmarkTiming();
}

BENCHMARK_NO_ARG(BM_TaskManager_enqueueTask);
void BM_TaskManager_enqueueTask::Run(int iters) {
    TaskManager taskManager;
    sp<TrivialProcessor> processor(new TrivialProcessor(&taskManager));
    std::vector<sp<TrivialTask> > tasks;
    tasks.reserve(iters);

    StartBenchmarkTiming();
    for (int i = 0; i < iters; i++) {
        tasks.emplace_back(new TrivialTask);
        MicroBench::DoNotOptimize(tasks.back());
        processor->add(tasks.back());
    }
    StopBenchmarkTiming();

    for (sp<TrivialTask>& task : tasks) {
        task->getResult();
    }
}

BENCHMARK_NO_ARG(BM_TaskManager_enqueueRunDeleteTask);
void BM_TaskManager_enqueueRunDeleteTask::Run(int iters) {
    TaskManager taskManager;
    sp<TrivialProcessor> processor(new TrivialProcessor(&taskManager));
    std::vector<sp<TrivialTask> > tasks;
    tasks.reserve(iters);

    StartBenchmarkTiming();
    for (int i = 0; i < iters; i++) {
        tasks.emplace_back(new TrivialTask);
        MicroBench::DoNotOptimize(tasks.back());
        processor->add(tasks.back());
    }
    for (sp<TrivialTask>& task : tasks) {
        MicroBench::DoNotOptimize(task->getResult());
    }
    tasks.clear();
    StopBenchmarkTiming();
}
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ bool TaskManager::WorkerThread::threadLoop() {
    return true;
}

bool TaskManager::WorkerThread::addTask(TaskWrapper task) {
bool TaskManager::WorkerThread::addTask(const TaskWrapper& task) {
    if (!isRunning()) {
        run(mName.string(), PRIORITY_DEFAULT);
    } else if (exitPending()) {
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ private:
    public:
        WorkerThread(const String8 name): mSignal(Condition::WAKE_UP_ONE), mName(name) { }

        bool addTask(TaskWrapper task);
        bool addTask(const TaskWrapper& task);
        size_t getTaskCount() const;
        void exit();