[SurfaceFlinger] Plumb getPerFrameMetadataKeys and setLayerPerFrameMetadata.
This patch compresses supported metdata types into a bitmask and stores it in
DisplayDevice and refactors the code in Hwc2::Layer regarding HdrMetadata. When
DisplayDevice is created, the ability of accepting metadata will be queried
from hardware composer and stored in DisplayDevice. Hwc2::Layer will construct
HdrMetadata to PerFrameMetadata when setPerFrameHdrMetadata is called if the
incoming meta data is changed.
Previously, setLayerPerFrameMetadata was named as setLayerHdrMetadata, but
since we move the responsibility of constructing PerFrameMetadata from
ComposerHal to Hwc2::Layer, we change the name to setLayerPerFrameMetadata,
which is more generic and matches the HIDL interface.
BUG: 77831156
Test: Build and flash
Change-Id: I447956f4dcf42c90ceb3d29091cd5034ad91061a
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index eb6ffe7..250c2f1 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -639,7 +639,7 @@
}
const HdrMetadata& metadata = mConsumer->getCurrentHdrMetadata();
- error = (*hwcLayer)->setHdrMetadata(metadata);
+ error = (*hwcLayer)->setPerFrameMetadata(displayDevice->getSupportedPerFrameMetadata(), metadata);
if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) {
ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(),
to_string(error).c_str(), static_cast<int32_t>(error));
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp
index cd41662..7c6302e 100644
--- a/services/surfaceflinger/DisplayDevice.cpp
+++ b/services/surfaceflinger/DisplayDevice.cpp
@@ -79,6 +79,7 @@
int displayHeight,
bool hasWideColorGamut,
const HdrCapabilities& hdrCapabilities,
+ const int32_t supportedPerFrameMetadata,
int initialPowerMode)
: lastCompositionHadVisibleLayers(false),
mFlinger(flinger),
@@ -103,7 +104,8 @@
mHasWideColorGamut(hasWideColorGamut),
mHasHdr10(false),
mHasHLG(false),
- mHasDolbyVision(false)
+ mHasDolbyVision(false),
+ mSupportedPerFrameMetadata(supportedPerFrameMetadata)
{
// clang-format on
for (Hdr hdrType : hdrCapabilities.getSupportedHdrTypes()) {
diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h
index cd0bed6..df5d945 100644
--- a/services/surfaceflinger/DisplayDevice.h
+++ b/services/surfaceflinger/DisplayDevice.h
@@ -23,17 +23,16 @@
#include <math/mat4.h>
-#include <ui/Region.h>
-
#include <binder/IBinder.h>
+#include <gui/ISurfaceComposer.h>
+#include <hardware/hwcomposer_defs.h>
+#include <ui/GraphicTypes.h>
+#include <ui/Region.h>
#include <utils/RefBase.h>
#include <utils/Mutex.h>
#include <utils/String8.h>
#include <utils/Timers.h>
-#include <gui/ISurfaceComposer.h>
-#include <hardware/hwcomposer_defs.h>
-#include <ui/GraphicTypes.h>
#include "RenderArea.h"
#include "RenderEngine/Surface.h"
@@ -86,6 +85,7 @@
int displayHeight,
bool hasWideColorGamut,
const HdrCapabilities& hdrCapabilities,
+ const int32_t supportedPerFrameMetadata,
int initialPowerMode);
// clang-format on
@@ -131,6 +131,8 @@
int32_t getHwcDisplayId() const { return mHwcDisplayId; }
const wp<IBinder>& getDisplayToken() const { return mDisplayToken; }
+ int32_t getSupportedPerFrameMetadata() const { return mSupportedPerFrameMetadata; }
+
// We pass in mustRecompose so we can keep VirtualDisplaySurface's state
// machine happy without actually queueing a buffer if nothing has changed
status_t beginFrame(bool mustRecompose) const;
@@ -259,6 +261,8 @@
bool mHasHdr10;
bool mHasHLG;
bool mHasDolbyVision;
+
+ const int32_t mSupportedPerFrameMetadata;
};
struct DisplayDeviceState {
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
index c94c290..37ba433 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.cpp
@@ -715,48 +715,6 @@
return Error::NONE;
}
-Error Composer::setLayerHdrMetadata(Display display, Layer layer, const HdrMetadata& metadata) {
- if (!mClient_2_2) {
- return Error::UNSUPPORTED;
- }
-
- mWriter.selectDisplay(display);
- mWriter.selectLayer(layer);
-
- std::vector<IComposerClient::PerFrameMetadata> composerMetadata;
- using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey;
- if (metadata.validTypes & HdrMetadata::SMPTE2086) {
- composerMetadata
- .insert(composerMetadata.end(),
- {{PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X,
- metadata.smpte2086.displayPrimaryRed.x},
- {PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y,
- metadata.smpte2086.displayPrimaryRed.y},
- {PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X,
- metadata.smpte2086.displayPrimaryGreen.x},
- {PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_Y,
- metadata.smpte2086.displayPrimaryGreen.y},
- {PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_X,
- metadata.smpte2086.displayPrimaryBlue.x},
- {PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_Y,
- metadata.smpte2086.displayPrimaryBlue.y},
- {PerFrameMetadataKey::WHITE_POINT_X, metadata.smpte2086.whitePoint.x},
- {PerFrameMetadataKey::WHITE_POINT_Y, metadata.smpte2086.whitePoint.y},
- {PerFrameMetadataKey::MAX_LUMINANCE, metadata.smpte2086.maxLuminance},
- {PerFrameMetadataKey::MIN_LUMINANCE, metadata.smpte2086.minLuminance}});
- }
- if (metadata.validTypes & HdrMetadata::CTA861_3) {
- composerMetadata.insert(composerMetadata.end(),
- {{PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL,
- metadata.cta8613.maxContentLightLevel},
- {PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL,
- metadata.cta8613.maxFrameAverageLightLevel}});
- }
-
- mWriter.setLayerPerFrameMetadata(composerMetadata);
- return Error::NONE;
-}
-
Error Composer::setLayerDisplayFrame(Display display, Layer layer,
const IComposerClient::Rect& frame)
{
@@ -927,6 +885,18 @@
// Composer HAL 2.2
+Error Composer::setLayerPerFrameMetadata(Display display, Layer layer,
+ const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) {
+ if (!mClient_2_2) {
+ return Error::UNSUPPORTED;
+ }
+
+ mWriter.selectDisplay(display);
+ mWriter.selectLayer(layer);
+ mWriter.setLayerPerFrameMetadata(perFrameMetadatas);
+ return Error::NONE;
+}
+
Error Composer::getPerFrameMetadataKeys(
Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) {
if (!mClient_2_2) {
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h
index e17fd67..beee539 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h
@@ -64,6 +64,9 @@
using V2_2::IComposer;
using V2_2::IComposerClient;
+using PerFrameMetadata = IComposerClient::PerFrameMetadata;
+using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey;
+
class Composer {
public:
virtual ~Composer() = 0;
@@ -160,8 +163,6 @@
virtual Error setLayerCompositionType(Display display, Layer layer,
IComposerClient::Composition type) = 0;
virtual Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) = 0;
- virtual Error setLayerHdrMetadata(Display display, Layer layer,
- const HdrMetadata& metadata) = 0;
virtual Error setLayerDisplayFrame(Display display, Layer layer,
const IComposerClient::Rect& frame) = 0;
virtual Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) = 0;
@@ -176,6 +177,9 @@
virtual Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) = 0;
// Composer HAL 2.2
+ virtual Error setLayerPerFrameMetadata(
+ Display display, Layer layer,
+ const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) = 0;
virtual Error getPerFrameMetadataKeys(
Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0;
virtual Error getRenderIntents(Display display, ColorMode colorMode,
@@ -353,7 +357,6 @@
Error setLayerCompositionType(Display display, Layer layer,
IComposerClient::Composition type) override;
Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) override;
- Error setLayerHdrMetadata(Display display, Layer layer, const HdrMetadata& metadata) override;
Error setLayerDisplayFrame(Display display, Layer layer,
const IComposerClient::Rect& frame) override;
Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) override;
@@ -368,6 +371,9 @@
Error setLayerInfo(Display display, Layer layer, uint32_t type, uint32_t appId) override;
// Composer HAL 2.2
+ Error setLayerPerFrameMetadata(
+ Display display, Layer layer,
+ const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) override;
Error getPerFrameMetadataKeys(
Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) override;
Error getRenderIntents(Display display, ColorMode colorMode,
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index 0667f8d..3947318 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -32,6 +32,7 @@
#include <algorithm>
#include <inttypes.h>
+#include <set>
using android::Fence;
using android::FloatRect;
@@ -54,6 +55,11 @@
namespace {
+inline bool hasMetadataKey(const std::set<Hwc2::PerFrameMetadataKey>& keys,
+ const Hwc2::PerFrameMetadataKey& key) {
+ return keys.find(key) != keys.end();
+}
+
class ComposerCallbackBridge : public Hwc2::IComposerCallback {
public:
ComposerCallbackBridge(ComposerCallback* callback, int32_t sequenceId)
@@ -370,6 +376,42 @@
return static_cast<Error>(intError);
}
+Error Display::getSupportedPerFrameMetadata(int32_t* outSupportedPerFrameMetadata) const
+{
+ *outSupportedPerFrameMetadata = 0;
+ std::vector<Hwc2::PerFrameMetadataKey> tmpKeys;
+ auto intError = mComposer.getPerFrameMetadataKeys(mId, &tmpKeys);
+ auto error = static_cast<Error>(intError);
+ if (error != Error::None) {
+ return error;
+ }
+
+ // Check whether a specific metadata type is supported. A metadata type is considered
+ // supported if and only if all required fields are supported.
+
+ // SMPTE2086
+ std::set<Hwc2::PerFrameMetadataKey> keys(tmpKeys.begin(), tmpKeys.end());
+ if (hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_Y) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_X) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_Y) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::WHITE_POINT_X) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::WHITE_POINT_Y) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_LUMINANCE) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MIN_LUMINANCE)) {
+ *outSupportedPerFrameMetadata |= HdrMetadata::Type::SMPTE2086;
+ }
+ // CTA861_3
+ if (hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL) &&
+ hasMetadataKey(keys, Hwc2::PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL)) {
+ *outSupportedPerFrameMetadata |= HdrMetadata::Type::CTA861_3;
+ }
+
+ return Error::None;
+}
+
Error Display::getRenderIntents(ColorMode colorMode,
std::vector<RenderIntent>* outRenderIntents) const
{
@@ -784,13 +826,49 @@
return static_cast<Error>(intError);
}
-Error Layer::setHdrMetadata(const android::HdrMetadata& metadata) {
+Error Layer::setPerFrameMetadata(const int32_t supportedPerFrameMetadata,
+ const android::HdrMetadata& metadata)
+{
if (metadata == mHdrMetadata) {
return Error::None;
}
mHdrMetadata = metadata;
- auto intError = mComposer.setLayerHdrMetadata(mDisplayId, mId, metadata);
+ int validTypes = mHdrMetadata.validTypes & supportedPerFrameMetadata;
+ std::vector<Hwc2::PerFrameMetadata> perFrameMetadatas;
+ if (validTypes & HdrMetadata::SMPTE2086) {
+ perFrameMetadatas.insert(perFrameMetadatas.end(),
+ {{Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X,
+ mHdrMetadata.smpte2086.displayPrimaryRed.x},
+ {Hwc2::PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y,
+ mHdrMetadata.smpte2086.displayPrimaryRed.y},
+ {Hwc2::PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X,
+ mHdrMetadata.smpte2086.displayPrimaryGreen.x},
+ {Hwc2::PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_Y,
+ mHdrMetadata.smpte2086.displayPrimaryGreen.y},
+ {Hwc2::PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_X,
+ mHdrMetadata.smpte2086.displayPrimaryBlue.x},
+ {Hwc2::PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_Y,
+ mHdrMetadata.smpte2086.displayPrimaryBlue.y},
+ {Hwc2::PerFrameMetadataKey::WHITE_POINT_X,
+ mHdrMetadata.smpte2086.whitePoint.x},
+ {Hwc2::PerFrameMetadataKey::WHITE_POINT_Y,
+ mHdrMetadata.smpte2086.whitePoint.y},
+ {Hwc2::PerFrameMetadataKey::MAX_LUMINANCE,
+ mHdrMetadata.smpte2086.maxLuminance},
+ {Hwc2::PerFrameMetadataKey::MIN_LUMINANCE,
+ mHdrMetadata.smpte2086.minLuminance}});
+ }
+
+ if (validTypes & HdrMetadata::CTA861_3) {
+ perFrameMetadatas.insert(perFrameMetadatas.end(),
+ {{Hwc2::PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL,
+ mHdrMetadata.cta8613.maxContentLightLevel},
+ {Hwc2::PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL,
+ mHdrMetadata.cta8613.maxFrameAverageLightLevel}});
+ }
+
+ auto intError = mComposer.setLayerPerFrameMetadata(mDisplayId, mId, perFrameMetadatas);
return static_cast<Error>(intError);
}
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index aa907ea..3ac06ec 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -27,7 +27,6 @@
#include <math/mat4.h>
#include <ui/GraphicTypes.h>
#include <ui/HdrCapabilities.h>
-
#include <utils/Log.h>
#include <utils/StrongPointer.h>
#include <utils/Timers.h>
@@ -212,6 +211,10 @@
std::unordered_map<Layer*, Composition>* outTypes);
[[clang::warn_unused_result]] Error getColorModes(
std::vector<android::ui::ColorMode>* outModes) const;
+ // outSupportedPerFrameMetadata is an opaque bitmask to the callers
+ // but contains HdrMetadata::Type::*.
+ [[clang::warn_unused_result]] Error getSupportedPerFrameMetadata(
+ int32_t* outSupportedPerFrameMetadata) const;
[[clang::warn_unused_result]] Error getRenderIntents(
android::ui::ColorMode colorMode,
std::vector<android::ui::RenderIntent>* outRenderIntents) const;
@@ -318,7 +321,9 @@
[[clang::warn_unused_result]] Error setCompositionType(Composition type);
[[clang::warn_unused_result]] Error setDataspace(
android::ui::Dataspace dataspace);
- [[clang::warn_unused_result]] Error setHdrMetadata(const android::HdrMetadata& metadata);
+ [[clang::warn_unused_result]] Error setPerFrameMetadata(
+ const int32_t supportedPerFrameMetadata,
+ const android::HdrMetadata& metadata);
[[clang::warn_unused_result]] Error setDisplayFrame(
const android::Rect& frame);
[[clang::warn_unused_result]] Error setPlaneAlpha(float alpha);
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 0a3ac84..1bbf039 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -842,6 +842,25 @@
return NO_ERROR;
}
+int32_t HWComposer::getSupportedPerFrameMetadata(int32_t displayId) const {
+ if (!isValidDisplay(displayId)) {
+ ALOGE("getPerFrameMetadataKeys: Attempted to access invalid display %d",
+ displayId);
+ return 0;
+ }
+
+ int32_t supportedMetadata;
+ auto error = mDisplayData[displayId].hwcDisplay->getSupportedPerFrameMetadata(
+ &supportedMetadata);
+ if (error != HWC2::Error::None) {
+ ALOGE("getPerFrameMetadataKeys failed for display %d: %s (%d)", displayId,
+ to_string(error).c_str(), static_cast<int32_t>(error));
+ return 0;
+ }
+
+ return supportedMetadata;
+}
+
std::vector<ui::RenderIntent> HWComposer::getRenderIntents(int32_t displayId,
ui::ColorMode colorMode) const {
if (!isValidDisplay(displayId)) {
@@ -853,7 +872,7 @@
std::vector<ui::RenderIntent> renderIntents;
auto error = mDisplayData[displayId].hwcDisplay->getRenderIntents(colorMode, &renderIntents);
if (error != HWC2::Error::None) {
- ALOGE("getColorModes failed for display %d: %s (%d)", displayId,
+ ALOGE("getRenderIntents failed for display %d: %s (%d)", displayId,
to_string(error).c_str(), static_cast<int32_t>(error));
return std::vector<ui::RenderIntent>();
}
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index 138e1f1..d7f3b08 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -24,7 +24,6 @@
#include <ui/Fence.h>
#include <ui/GraphicTypes.h>
-
#include <utils/BitSet.h>
#include <utils/Condition.h>
#include <utils/Mutex.h>
@@ -137,6 +136,8 @@
// Fetches the HDR capabilities of the given display
status_t getHdrCapabilities(int32_t displayId, HdrCapabilities* outCapabilities);
+ int32_t getSupportedPerFrameMetadata(int32_t displayId) const;
+
// Returns the available RenderIntent of the given display.
std::vector<ui::RenderIntent> getRenderIntents(int32_t displayId, ui::ColorMode colorMode) const;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index b65d517..844ba7f 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2314,7 +2314,9 @@
sp<DisplayDevice> hw =
new DisplayDevice(this, state.type, hwcId, state.isSecure, display, nativeWindow,
dispSurface, std::move(renderSurface), displayWidth, displayHeight,
- hasWideColorGamut, hdrCapabilities, initialPowerMode);
+ hasWideColorGamut, hdrCapabilities,
+ getHwComposer().getSupportedPerFrameMetadata(hwcId),
+ initialPowerMode);
if (maxFrameBufferAcquiredBuffers >= 3) {
nativeWindowSurface->preallocateBuffers();
diff --git a/services/surfaceflinger/tests/hwc2/Android.bp b/services/surfaceflinger/tests/hwc2/Android.bp
index 6c0e4ab..0957d6a 100644
--- a/services/surfaceflinger/tests/hwc2/Android.bp
+++ b/services/surfaceflinger/tests/hwc2/Android.bp
@@ -41,7 +41,6 @@
"libmath",
],
shared_libs: [
- "android.hardware.graphics.common@1.0",
"android.hardware.graphics.common@1.1",
"libcutils",
"libEGL",
diff --git a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
index 2551a9c..0408c71 100644
--- a/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
+++ b/services/surfaceflinger/tests/unittests/DisplayTransactionTest.cpp
@@ -81,7 +81,7 @@
sp<DisplayDevice> build() {
return new DisplayDevice(mFlinger.mFlinger.get(), mType, mHwcId, false, mDisplayToken,
mNativeWindow, mDisplaySurface, std::move(mRenderSurface), 0,
- 0, false, {}, HWC_POWER_MODE_NORMAL);
+ 0, false, {}, 0, HWC_POWER_MODE_NORMAL);
}
FakeDisplayDeviceFactory& setNativeWindow(const sp<ANativeWindow>& nativeWindow) {
diff --git a/services/surfaceflinger/tests/unittests/MockComposer.h b/services/surfaceflinger/tests/unittests/MockComposer.h
index 8be2779..267670a 100644
--- a/services/surfaceflinger/tests/unittests/MockComposer.h
+++ b/services/surfaceflinger/tests/unittests/MockComposer.h
@@ -99,7 +99,8 @@
MOCK_METHOD3(setLayerColor, Error(Display, Layer, const IComposerClient::Color&));
MOCK_METHOD3(setLayerCompositionType, Error(Display, Layer, IComposerClient::Composition));
MOCK_METHOD3(setLayerDataspace, Error(Display, Layer, Dataspace));
- MOCK_METHOD3(setLayerHdrMetadata, Error(Display, Layer, const HdrMetadata&));
+ MOCK_METHOD3(setLayerPerFrameMetadata,
+ Error(Display, Layer, const std::vector<IComposerClient::PerFrameMetadata>&));
MOCK_METHOD3(setLayerDisplayFrame, Error(Display, Layer, const IComposerClient::Rect&));
MOCK_METHOD3(setLayerPlaneAlpha, Error(Display, Layer, float));
MOCK_METHOD3(setLayerSidebandStream, Error(Display, Layer, const native_handle_t*));