blob: fec6242728b28a43816c120d51ffb96fbbe3ad8c [file]
/*
* Copyright (C) 2024 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 <memory>
#include <optional>
#include <benchmark/benchmark.h>
#include <Client.h> // temporarily needed for LayerCreationArgs
#include <FrontEnd/LayerCreationArgs.h>
#include <FrontEnd/LayerLifecycleManager.h>
#include <LayerLifecycleManagerHelper.h>
namespace android::surfaceflinger {
namespace {
using namespace android::surfaceflinger::frontend;
static void addRemoveLayers(benchmark::State& state) {
LayerLifecycleManager lifecycleManager;
for (auto _ : state) {
std::vector<std::unique_ptr<RequestedLayerState>> layers;
layers.emplace_back(LayerLifecycleManagerHelper::rootLayer(1));
layers.emplace_back(LayerLifecycleManagerHelper::rootLayer(2));
layers.emplace_back(LayerLifecycleManagerHelper::rootLayer(3));
lifecycleManager.addLayers(std::move(layers));
lifecycleManager.onHandlesDestroyed({{1, "1"}, {2, "2"}, {3, "3"}});
lifecycleManager.commitChanges();
}
}
BENCHMARK(addRemoveLayers);
static void updateClientStates(benchmark::State& state) {
LayerLifecycleManager lifecycleManager;
std::vector<std::unique_ptr<RequestedLayerState>> layers;
layers.emplace_back(LayerLifecycleManagerHelper::rootLayer(1));
lifecycleManager.addLayers(std::move(layers));
lifecycleManager.commitChanges();
std::vector<QueuedTransactionState> transactions;
transactions.emplace_back();
transactions.back().states.push_back({});
auto& transactionState = transactions.back().states.front();
transactionState.state.what = layer_state_t::eColorChanged;
transactionState.state.color.rgb = {0.f, 0.f, 0.f};
transactionState.layerId = 1;
lifecycleManager.applyTransactions(transactions);
lifecycleManager.commitChanges();
int i = 0;
for (auto s : state) {
if (i++ % 100 == 0) i = 0;
transactionState.state.color.b = static_cast<float>(i / 100.f);
lifecycleManager.applyTransactions(transactions);
lifecycleManager.commitChanges();
}
}
BENCHMARK(updateClientStates);
static void updateClientStatesNoChanges(benchmark::State& state) {
LayerLifecycleManager lifecycleManager;
std::vector<std::unique_ptr<RequestedLayerState>> layers;
layers.emplace_back(LayerLifecycleManagerHelper::rootLayer(1));
lifecycleManager.addLayers(std::move(layers));
std::vector<QueuedTransactionState> transactions;
transactions.emplace_back();
transactions.back().states.push_back({});
auto& transactionState = transactions.back().states.front();
transactionState.state.what = layer_state_t::eColorChanged;
transactionState.state.color.rgb = {0.f, 0.f, 0.f};
transactionState.layerId = 1;
lifecycleManager.applyTransactions(transactions);
lifecycleManager.commitChanges();
for (auto _ : state) {
lifecycleManager.applyTransactions(transactions);
lifecycleManager.commitChanges();
}
}
BENCHMARK(updateClientStatesNoChanges);
static void propagateManyHiddenChildren(benchmark::State& state) {
LayerLifecycleManager lifecycleManager;
LayerLifecycleManagerHelper helper(lifecycleManager);
helper.createRootLayer(0);
for (uint32_t i = 1; i < 50; ++i) {
helper.createLayer(i, i - 1);
}
helper.hideLayer(0);
LayerHierarchyBuilder hierarchyBuilder;
DisplayInfo info;
info.info.logicalHeight = 100;
info.info.logicalWidth = 100;
DisplayInfos displayInfos;
displayInfos.emplace_or_replace(ui::LayerStack::fromValue(1), info);
ShadowSettings globalShadowSettings;
LayerSnapshotBuilder snapshotBuilder;
int i = 1;
for (auto _ : state) {
i++;
helper.setAlpha(0, (1 + (i % 255)) / 255.0f);
if (lifecycleManager.getGlobalChanges().test(RequestedLayerState::Changes::Hierarchy)) {
hierarchyBuilder.update(lifecycleManager);
}
LayerSnapshotBuilder::Args args{.root = hierarchyBuilder.getHierarchy(),
.layerLifecycleManager = lifecycleManager,
.displays = displayInfos,
.globalShadowSettings = globalShadowSettings,
.supportedLayerGenericMetadata = {},
.genericLayerMetadataKeyMap = {}};
snapshotBuilder.update(args);
lifecycleManager.commitChanges();
}
}
BENCHMARK(propagateManyHiddenChildren);
} // namespace
} // namespace android::surfaceflinger