• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 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 <gtest/gtest.h>
18 
19 #include <binder/Binder.h>
20 #include <binder/Parcel.h>
21 
22 #include <gui/LayerState.h>
23 
24 namespace android {
25 using gui::DisplayCaptureArgs;
26 using gui::LayerCaptureArgs;
27 using gui::ScreenCaptureResults;
28 
29 namespace test {
30 
TEST(LayerStateTest,ParcellingDisplayCaptureArgs)31 TEST(LayerStateTest, ParcellingDisplayCaptureArgs) {
32     DisplayCaptureArgs args;
33     args.pixelFormat = ui::PixelFormat::RGB_565;
34     args.sourceCrop = Rect(0, 0, 500, 200);
35     args.frameScaleX = 2;
36     args.frameScaleY = 4;
37     args.captureSecureLayers = true;
38     args.displayToken = sp<BBinder>::make();
39     args.width = 10;
40     args.height = 20;
41     args.useIdentityTransform = true;
42     args.grayscale = true;
43 
44     Parcel p;
45     args.writeToParcel(&p);
46     p.setDataPosition(0);
47 
48     DisplayCaptureArgs args2;
49     args2.readFromParcel(&p);
50 
51     ASSERT_EQ(args.pixelFormat, args2.pixelFormat);
52     ASSERT_EQ(args.sourceCrop, args2.sourceCrop);
53     ASSERT_EQ(args.frameScaleX, args2.frameScaleX);
54     ASSERT_EQ(args.frameScaleY, args2.frameScaleY);
55     ASSERT_EQ(args.captureSecureLayers, args2.captureSecureLayers);
56     ASSERT_EQ(args.displayToken, args2.displayToken);
57     ASSERT_EQ(args.width, args2.width);
58     ASSERT_EQ(args.height, args2.height);
59     ASSERT_EQ(args.useIdentityTransform, args2.useIdentityTransform);
60     ASSERT_EQ(args.grayscale, args2.grayscale);
61 }
62 
TEST(LayerStateTest,ParcellingLayerCaptureArgs)63 TEST(LayerStateTest, ParcellingLayerCaptureArgs) {
64     LayerCaptureArgs args;
65     args.pixelFormat = ui::PixelFormat::RGB_565;
66     args.sourceCrop = Rect(0, 0, 500, 200);
67     args.frameScaleX = 2;
68     args.frameScaleY = 4;
69     args.captureSecureLayers = true;
70     args.layerHandle = sp<BBinder>::make();
71     args.excludeHandles = {sp<BBinder>::make(), sp<BBinder>::make()};
72     args.childrenOnly = false;
73     args.grayscale = true;
74 
75     Parcel p;
76     args.writeToParcel(&p);
77     p.setDataPosition(0);
78 
79     LayerCaptureArgs args2;
80     args2.readFromParcel(&p);
81 
82     ASSERT_EQ(args.pixelFormat, args2.pixelFormat);
83     ASSERT_EQ(args.sourceCrop, args2.sourceCrop);
84     ASSERT_EQ(args.frameScaleX, args2.frameScaleX);
85     ASSERT_EQ(args.frameScaleY, args2.frameScaleY);
86     ASSERT_EQ(args.captureSecureLayers, args2.captureSecureLayers);
87     ASSERT_EQ(args.layerHandle, args2.layerHandle);
88     ASSERT_EQ(args.excludeHandles, args2.excludeHandles);
89     ASSERT_EQ(args.childrenOnly, args2.childrenOnly);
90     ASSERT_EQ(args.grayscale, args2.grayscale);
91 }
92 
TEST(LayerStateTest,ParcellingScreenCaptureResultsWithFence)93 TEST(LayerStateTest, ParcellingScreenCaptureResultsWithFence) {
94     ScreenCaptureResults results;
95     results.buffer = sp<GraphicBuffer>::make(100u, 200u, PIXEL_FORMAT_RGBA_8888, 1u, 0u);
96     results.fenceResult = sp<Fence>::make(dup(fileno(tmpfile())));
97     results.capturedSecureLayers = true;
98     results.capturedDataspace = ui::Dataspace::DISPLAY_P3;
99 
100     Parcel p;
101     results.writeToParcel(&p);
102     p.setDataPosition(0);
103 
104     ScreenCaptureResults results2;
105     results2.readFromParcel(&p);
106 
107     // GraphicBuffer object is reallocated so compare the data in the graphic buffer
108     // rather than the object itself
109     ASSERT_EQ(results.buffer->getWidth(), results2.buffer->getWidth());
110     ASSERT_EQ(results.buffer->getHeight(), results2.buffer->getHeight());
111     ASSERT_EQ(results.buffer->getPixelFormat(), results2.buffer->getPixelFormat());
112     ASSERT_TRUE(results.fenceResult.ok());
113     ASSERT_TRUE(results2.fenceResult.ok());
114     ASSERT_EQ(results.fenceResult.value()->isValid(), results2.fenceResult.value()->isValid());
115     ASSERT_EQ(results.capturedSecureLayers, results2.capturedSecureLayers);
116     ASSERT_EQ(results.capturedDataspace, results2.capturedDataspace);
117 }
118 
TEST(LayerStateTest,ParcellingScreenCaptureResultsWithNoFenceOrError)119 TEST(LayerStateTest, ParcellingScreenCaptureResultsWithNoFenceOrError) {
120     ScreenCaptureResults results;
121 
122     Parcel p;
123     results.writeToParcel(&p);
124     p.setDataPosition(0);
125 
126     ScreenCaptureResults results2;
127     results2.readFromParcel(&p);
128 
129     ASSERT_TRUE(results2.fenceResult.ok());
130     ASSERT_EQ(results2.fenceResult.value(), Fence::NO_FENCE);
131 }
132 
TEST(LayerStateTest,ParcellingScreenCaptureResultsWithFenceError)133 TEST(LayerStateTest, ParcellingScreenCaptureResultsWithFenceError) {
134     ScreenCaptureResults results;
135     results.fenceResult = base::unexpected(BAD_VALUE);
136 
137     Parcel p;
138     results.writeToParcel(&p);
139     p.setDataPosition(0);
140 
141     ScreenCaptureResults results2;
142     results2.readFromParcel(&p);
143 
144     ASSERT_FALSE(results.fenceResult.ok());
145     ASSERT_FALSE(results2.fenceResult.ok());
146     ASSERT_EQ(results.fenceResult.error(), results2.fenceResult.error());
147 }
148 
149 } // namespace test
150 } // namespace android
151