diff options
Diffstat (limited to 'services/surfaceflinger/RefreshRateOverlay.cpp')
-rw-r--r-- | services/surfaceflinger/RefreshRateOverlay.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp new file mode 100644 index 0000000000..5b4bec96ea --- /dev/null +++ b/services/surfaceflinger/RefreshRateOverlay.cpp @@ -0,0 +1,60 @@ +/* + * Copyright 2019 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 "RefreshRateOverlay.h" +#include "Client.h" +#include "Layer.h" + +namespace android { + +using RefreshRateType = scheduler::RefreshRateConfigs::RefreshRateType; + +RefreshRateOverlay::RefreshRateOverlay(SurfaceFlinger& flinger) + : mFlinger(flinger), mClient(new Client(&mFlinger)) { + createLayer(); +} + +bool RefreshRateOverlay::createLayer() { + const status_t ret = + mFlinger.createLayer(String8("RefreshRateOverlay"), mClient, 0, 0, + PIXEL_FORMAT_RGBA_8888, ISurfaceComposerClient::eFXSurfaceColor, + LayerMetadata(), &mIBinder, &mGbp, nullptr); + if (ret) { + ALOGE("failed to create color layer"); + return false; + } + + Mutex::Autolock _l(mFlinger.mStateLock); + mLayer = mClient->getLayerUser(mIBinder); + mLayer->setCrop_legacy(Rect(50, 70, 200, 100), true); + + // setting Layer's Z requires resorting layersSortedByZ + ssize_t idx = mFlinger.mCurrentState.layersSortedByZ.indexOf(mLayer); + if (mLayer->setLayer(INT32_MAX - 2) && idx >= 0) { + mFlinger.mCurrentState.layersSortedByZ.removeAt(idx); + mFlinger.mCurrentState.layersSortedByZ.add(mLayer); + } + + return true; +} + +void RefreshRateOverlay::changeRefreshRate(RefreshRateType type) { + const half3& color = (type == RefreshRateType::PERFORMANCE) ? GREEN : RED; + mLayer->setColor(color); + mFlinger.mTransactionFlags.fetch_or(eTransactionMask); +} + +}; // namespace android |