blob: d0cc8ef973300b3b95aea07e37f040f3fd1c2568 [file] [log] [blame]
chaviw8beb4142019-04-11 13:09:05 -07001
2/*
3 * Copyright 2019 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#include "compositionengine/mock/NativeWindow.h"
19#include <log/log.h>
20
21namespace android::compositionengine::mock {
22
23static int forwardSetSwapInterval(ANativeWindow* window, int interval) {
24 return static_cast<NativeWindow*>(window)->setSwapInterval(interval);
25}
26
27static int forwardDequeueBuffer(ANativeWindow* window, ANativeWindowBuffer** buffer, int* fenceFd) {
28 return static_cast<NativeWindow*>(window)->dequeueBuffer(buffer, fenceFd);
29}
30
31static int forwardCancelBuffer(ANativeWindow* window, ANativeWindowBuffer* buffer, int fenceFd) {
32 return static_cast<NativeWindow*>(window)->cancelBuffer(buffer, fenceFd);
33}
34
35static int forwardQueueBuffer(ANativeWindow* window, ANativeWindowBuffer* buffer, int fenceFd) {
36 return static_cast<NativeWindow*>(window)->queueBuffer(buffer, fenceFd);
37}
38
39static int forwardQuery(const ANativeWindow* window, int what, int* value) {
40 return static_cast<const NativeWindow*>(window)->query(what, value);
41}
42
43static int forwardPerform(ANativeWindow* window, int operation, ...) {
44 va_list args;
45 va_start(args, operation);
46 int result = NO_ERROR;
47 switch (operation) {
48 case NATIVE_WINDOW_API_CONNECT: {
49 int api = va_arg(args, int);
50 result = static_cast<NativeWindow*>(window)->connect(api);
51 break;
52 }
53 case NATIVE_WINDOW_SET_BUFFERS_FORMAT: {
54 PixelFormat format = va_arg(args, PixelFormat);
55 result = static_cast<NativeWindow*>(window)->setBuffersFormat(format);
56 break;
57 }
58 case NATIVE_WINDOW_SET_BUFFERS_DATASPACE: {
59 ui::Dataspace dataspace = static_cast<ui::Dataspace>(va_arg(args, int));
60 result = static_cast<NativeWindow*>(window)->setBuffersDataSpace(dataspace);
61 break;
62 }
63 case NATIVE_WINDOW_SET_USAGE: {
64 // Note: Intentionally widens usage from 32 to 64 bits so we
65 // just have one implementation.
66 uint64_t usage = va_arg(args, uint32_t);
67 result = static_cast<NativeWindow*>(window)->setUsage(usage);
68 break;
69 }
70 case NATIVE_WINDOW_SET_USAGE64: {
71 uint64_t usage = va_arg(args, uint64_t);
72 result = static_cast<NativeWindow*>(window)->setUsage(usage);
73 break;
74 }
75 case NATIVE_WINDOW_API_DISCONNECT: {
76 int api = va_arg(args, int);
77 result = static_cast<NativeWindow*>(window)->disconnect(api);
78 break;
79 }
80 default:
81 LOG_ALWAYS_FATAL("Unexpected operation %d", operation);
82 break;
83 }
84
85 va_end(args);
86 return result;
87}
88
89static int forwardDequeueBufferDeprecated(ANativeWindow* window, ANativeWindowBuffer** buffer) {
90 int ignoredFenceFd = -1;
91 return static_cast<NativeWindow*>(window)->dequeueBuffer(buffer, &ignoredFenceFd);
92}
93
94static int forwardCancelBufferDeprecated(ANativeWindow* window, ANativeWindowBuffer* buffer) {
95 return static_cast<NativeWindow*>(window)->cancelBuffer(buffer, -1);
96}
97
98static int forwardLockBufferDeprecated(ANativeWindow* window, ANativeWindowBuffer* buffer) {
99 return static_cast<NativeWindow*>(window)->lockBuffer_DEPRECATED(buffer);
100}
101
102static int forwardQueueBufferDeprecated(ANativeWindow* window, ANativeWindowBuffer* buffer) {
103 return static_cast<NativeWindow*>(window)->queueBuffer(buffer, -1);
104}
105
106NativeWindow::NativeWindow() {
107 ANativeWindow::setSwapInterval = &forwardSetSwapInterval;
108 ANativeWindow::dequeueBuffer = &forwardDequeueBuffer;
109 ANativeWindow::cancelBuffer = &forwardCancelBuffer;
110 ANativeWindow::queueBuffer = &forwardQueueBuffer;
111 ANativeWindow::query = &forwardQuery;
112 ANativeWindow::perform = &forwardPerform;
113
114 ANativeWindow::dequeueBuffer_DEPRECATED = &forwardDequeueBufferDeprecated;
115 ANativeWindow::cancelBuffer_DEPRECATED = &forwardCancelBufferDeprecated;
116 ANativeWindow::lockBuffer_DEPRECATED = &forwardLockBufferDeprecated;
117 ANativeWindow::queueBuffer_DEPRECATED = &forwardQueueBufferDeprecated;
118}
119NativeWindow::~NativeWindow() = default;
120
121} // namespace android::compositionengine::mock