1aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu/*
2aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * Copyright (C) 2017 The Android Open Source Project
3aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu *
4aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * Licensed under the Apache License, Version 2.0 (the "License");
5aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * you may not use this file except in compliance with the License.
6aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * You may obtain a copy of the License at
7aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu *
8aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu *      http://www.apache.org/licenses/LICENSE-2.0
9aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu *
10aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * Unless required by applicable law or agreed to in writing, software
11aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * distributed under the License is distributed on an "AS IS" BASIS,
12aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * See the License for the specific language governing permissions and
14aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu * limitations under the License.
15aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu */
16aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
17aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu#include "HWComposerBufferCache.h"
18aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
19aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu#include <gui/BufferQueue.h>
20aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
21aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wunamespace android {
22aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
23aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I WuHWComposerBufferCache::HWComposerBufferCache()
24aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu{
25aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    mBuffers.reserve(BufferQueue::NUM_BUFFER_SLOTS);
26aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu}
27aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
28aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wuvoid HWComposerBufferCache::getHwcBuffer(int slot,
29aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        const sp<GraphicBuffer>& buffer,
30aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        uint32_t* outSlot, sp<GraphicBuffer>* outBuffer)
31aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu{
32aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    if (slot == BufferQueue::INVALID_BUFFER_SLOT || slot < 0) {
33aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        // default to slot 0
34aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        slot = 0;
35aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    }
36aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
37aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    if (static_cast<size_t>(slot) >= mBuffers.size()) {
38aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        mBuffers.resize(slot + 1);
39aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    }
40aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
41aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    *outSlot = slot;
42aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
43aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    if (mBuffers[slot] == buffer) {
44aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        // already cached in HWC, skip sending the buffer
45aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        *outBuffer = nullptr;
46aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    } else {
47aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        *outBuffer = buffer;
48aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
49aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        // update cache
50aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu        mBuffers[slot] = buffer;
51aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu    }
52aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu}
53aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu
54aaff73f92a2fcadda8c765eb9b02f2849418a873Chia-I Wu} // namespace android
55