blob: b459cd65c47db0ca0a6fe7ec6172b55604ac28bd [file] [log] [blame]
Marissa Wall6bd8bfd2016-12-15 12:25:31 -08001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <sstream>
18
19#include "Hwc2TestLayer.h"
20
Marissa Wallf7618ed2016-12-15 12:34:39 -080021Hwc2TestLayer::Hwc2TestLayer(Hwc2TestCoverage coverage, const Area& displayArea)
Marissa Wallffc67da2016-12-15 12:26:09 -080022 : mBlendMode(coverage),
Marissa Wallc57468f2016-12-15 12:31:12 -080023 mBufferArea(coverage, displayArea),
Marissa Wallee242782016-12-15 12:30:12 -080024 mColor(coverage),
Marissa Wallb72b5c92016-12-15 12:26:39 -080025 mComposition(coverage),
Marissa Wall2b1f5302016-12-15 12:27:20 -080026 mDataspace(coverage),
Marissa Wall600a73b2016-12-15 12:30:39 -080027 mDisplayFrame(coverage, displayArea),
Marissa Wallac108192016-12-15 12:27:48 -080028 mPlaneAlpha(coverage),
Marissa Wallc57468f2016-12-15 12:31:12 -080029 mSourceCrop(coverage),
Marissa Wallad761812016-12-15 12:32:24 -080030 mSurfaceDamage(coverage),
Marissa Wallf7618ed2016-12-15 12:34:39 -080031 mTransform(coverage)
Marissa Wallc57468f2016-12-15 12:31:12 -080032{
Marissa Wall5a240aa2016-12-15 12:34:06 -080033 mBufferArea.setDependent(&mBuffer);
Marissa Wallc57468f2016-12-15 12:31:12 -080034 mBufferArea.setDependent(&mSourceCrop);
Marissa Wallad761812016-12-15 12:32:24 -080035 mBufferArea.setDependent(&mSurfaceDamage);
Marissa Wallee242782016-12-15 12:30:12 -080036 mBlendMode.setDependent(&mColor);
Marissa Wallc57468f2016-12-15 12:31:12 -080037}
Marissa Wall6bd8bfd2016-12-15 12:25:31 -080038
39std::string Hwc2TestLayer::dump() const
40{
41 std::stringstream dmp;
42
43 dmp << "layer: \n";
Marissa Wallffc67da2016-12-15 12:26:09 -080044
45 for (auto property : mProperties) {
46 dmp << property->dump();
47 }
Marissa Wall6bd8bfd2016-12-15 12:25:31 -080048
Marissa Wallf7618ed2016-12-15 12:34:39 -080049 dmp << mVisibleRegion.dump();
Marissa Wall273b1df2016-12-15 12:28:47 -080050 dmp << "\tz order: " << mZOrder << "\n";
51
Marissa Wall6bd8bfd2016-12-15 12:25:31 -080052 return dmp.str();
53}
54
Marissa Wall5a240aa2016-12-15 12:34:06 -080055int Hwc2TestLayer::getBuffer(buffer_handle_t* outHandle,
56 android::base::unique_fd* outAcquireFence)
57{
58 int32_t acquireFence;
59 int ret = mBuffer.get(outHandle, &acquireFence);
60 outAcquireFence->reset(acquireFence);
61 return ret;
62}
63
Marissa Wall1cd789c2017-01-27 12:55:36 -080064int Hwc2TestLayer::getBuffer(buffer_handle_t* outHandle,
65 int32_t* outAcquireFence)
66{
67 return mBuffer.get(outHandle, outAcquireFence);
68}
69
Marissa Wallf7618ed2016-12-15 12:34:39 -080070void Hwc2TestLayer::setZOrder(uint32_t zOrder)
71{
72 mZOrder = zOrder;
73}
74
75void Hwc2TestLayer::setVisibleRegion(const android::Region& region)
76{
77 return mVisibleRegion.set(region);
78}
79
Marissa Wall6bd8bfd2016-12-15 12:25:31 -080080void Hwc2TestLayer::reset()
81{
Marissa Wallf7618ed2016-12-15 12:34:39 -080082 mVisibleRegion.release();
83
Marissa Wallffc67da2016-12-15 12:26:09 -080084 for (auto property : mProperties) {
85 property->reset();
86 }
87}
88
Marissa Wall1cd789c2017-01-27 12:55:36 -080089bool Hwc2TestLayer::advance()
90{
91 for (auto property : mProperties) {
92 if (property->isSupported(mComposition.get()))
93 if (property->advance())
94 return true;
95 }
96 return false;
97}
98
Marissa Wallffc67da2016-12-15 12:26:09 -080099hwc2_blend_mode_t Hwc2TestLayer::getBlendMode() const
100{
101 return mBlendMode.get();
Marissa Wall6bd8bfd2016-12-15 12:25:31 -0800102}
103
Marissa Wallf7618ed2016-12-15 12:34:39 -0800104Area Hwc2TestLayer::getBufferArea() const
105{
106 return mBufferArea.get();
107}
108
Marissa Wallee242782016-12-15 12:30:12 -0800109hwc_color_t Hwc2TestLayer::getColor() const
110{
111 return mColor.get();
112}
113
Marissa Wall6bd8bfd2016-12-15 12:25:31 -0800114hwc2_composition_t Hwc2TestLayer::getComposition() const
115{
116 return mComposition.get();
117}
118
Marissa Wall2a0aaf92016-12-15 12:31:37 -0800119/* The cursor position corresponds to {displayFrame.left, displayFrame.top} */
120hwc_rect_t Hwc2TestLayer::getCursorPosition() const
121{
122 return mDisplayFrame.get();
123}
124
Marissa Wallb72b5c92016-12-15 12:26:39 -0800125android_dataspace_t Hwc2TestLayer::getDataspace() const
126{
127 return mDataspace.get();
128}
129
Marissa Wall600a73b2016-12-15 12:30:39 -0800130hwc_rect_t Hwc2TestLayer::getDisplayFrame() const
131{
132 return mDisplayFrame.get();
133}
134
Marissa Wall2b1f5302016-12-15 12:27:20 -0800135float Hwc2TestLayer::getPlaneAlpha() const
136{
137 return mPlaneAlpha.get();
138}
139
Marissa Wallc57468f2016-12-15 12:31:12 -0800140hwc_frect_t Hwc2TestLayer::getSourceCrop() const
141{
142 return mSourceCrop.get();
143}
144
Marissa Wallad761812016-12-15 12:32:24 -0800145hwc_region_t Hwc2TestLayer::getSurfaceDamage() const
146{
147 return mSurfaceDamage.get();
148}
149
Marissa Wallac108192016-12-15 12:27:48 -0800150hwc_transform_t Hwc2TestLayer::getTransform() const
151{
152 return mTransform.get();
153}
154
Marissa Wallf7618ed2016-12-15 12:34:39 -0800155hwc_region_t Hwc2TestLayer::getVisibleRegion() const
156{
157 return mVisibleRegion.get();
158}
159
Marissa Wall273b1df2016-12-15 12:28:47 -0800160uint32_t Hwc2TestLayer::getZOrder() const
161{
162 return mZOrder;
163}
164
Marissa Wallffc67da2016-12-15 12:26:09 -0800165bool Hwc2TestLayer::advanceBlendMode()
166{
167 return mBlendMode.advance();
168}
169
Marissa Wallc57468f2016-12-15 12:31:12 -0800170bool Hwc2TestLayer::advanceBufferArea()
171{
172 return mBufferArea.advance();
173}
174
Marissa Wallee242782016-12-15 12:30:12 -0800175bool Hwc2TestLayer::advanceColor()
176{
177 return mColor.advance();
178}
179
Marissa Wall6bd8bfd2016-12-15 12:25:31 -0800180bool Hwc2TestLayer::advanceComposition()
181{
182 return mComposition.advance();
183}
Marissa Wallb72b5c92016-12-15 12:26:39 -0800184
Marissa Wall2a0aaf92016-12-15 12:31:37 -0800185bool Hwc2TestLayer::advanceCursorPosition()
186{
187 return mDisplayFrame.advance();
188}
189
Marissa Wallb72b5c92016-12-15 12:26:39 -0800190bool Hwc2TestLayer::advanceDataspace()
191{
192 return mDataspace.advance();
193}
Marissa Wall2b1f5302016-12-15 12:27:20 -0800194
Marissa Wall600a73b2016-12-15 12:30:39 -0800195bool Hwc2TestLayer::advanceDisplayFrame()
196{
197 return mDisplayFrame.advance();
198}
199
Marissa Wall2b1f5302016-12-15 12:27:20 -0800200bool Hwc2TestLayer::advancePlaneAlpha()
201{
202 return mPlaneAlpha.advance();
203}
Marissa Wallac108192016-12-15 12:27:48 -0800204
Marissa Wallc57468f2016-12-15 12:31:12 -0800205bool Hwc2TestLayer::advanceSourceCrop()
206{
207 return mSourceCrop.advance();
208}
209
Marissa Wallad761812016-12-15 12:32:24 -0800210bool Hwc2TestLayer::advanceSurfaceDamage()
211{
212 return mSurfaceDamage.advance();
213}
214
Marissa Wallac108192016-12-15 12:27:48 -0800215bool Hwc2TestLayer::advanceTransform()
216{
217 return mTransform.advance();
218}
Marissa Wallf7618ed2016-12-15 12:34:39 -0800219
220bool Hwc2TestLayer::advanceVisibleRegion()
221{
222 if (mPlaneAlpha.advance())
223 return true;
224 return mDisplayFrame.advance();
225}