Files
android_vendor_qcom_opensou…/libhwcomposer/hwc_copybit.h
Xiaoming Zhou b49438cfd3 hwcomposer: 8x10: increase frame buffer count to 3 for copybit
On 8x10, ppp composition is enabled.  For PPP blending operation,
it can take around 14-15ms. This results that when the frame is
given to the display for rendering, it can happen around the
vsync boundary.   While DMA does the page flipping, it makes sure
it happens on vsync boundary.  However, in the ppp case, the vsync
can be from the previous frame, not the new frame just delivered.
Because of that, there will be tearing.  Increase the buffer count
to 3 will resolve this issue, and improve the frame rate as well.

Change-Id: I53bff1a61b38eaecd286fdbe8a069522e28df6ba
2013-07-05 16:32:05 -04:00

91 lines
3.0 KiB
C++

/*
* Copyright (C) 2010 The Android Open Source Project
* Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
*
* Not a Contribution, Apache license notifications and license are retained
* for attribution purposes only.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef HWC_COPYBIT_H
#define HWC_COPYBIT_H
#include "hwc_utils.h"
#define NUM_RENDER_BUFFERS 3
namespace qhwc {
class CopyBit {
public:
CopyBit();
~CopyBit();
// API to get copybit engine(non static)
struct copybit_device_t *getCopyBitDevice();
//Sets up members and prepares copybit if conditions are met
bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list,
int dpy);
//Draws layer if the layer is set for copybit in prepare
bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list,
int dpy, int* fd);
// resets the values
void reset();
private_handle_t * getCurrentRenderBuffer();
void setReleaseFd(int fd);
private:
// holds the copybit device
struct copybit_device_t *mEngine;
// Helper functions for copybit composition
int drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer,
private_handle_t *renderBuffer, int dpy);
bool canUseCopybitForYUV (hwc_context_t *ctx);
bool canUseCopybitForRGB (hwc_context_t *ctx,
hwc_display_contents_1_t *list, int dpy);
bool validateParams (hwc_context_t *ctx,
const hwc_display_contents_1_t *list);
//Flags if this feature is on.
bool mIsModeOn;
// flag that indicates whether CopyBit composition is enabled for this cycle
bool mCopyBitDraw;
unsigned int getRGBRenderingArea
(const hwc_display_contents_1_t *list);
void getLayerResolution(const hwc_layer_1_t* layer,
unsigned int &width, unsigned int& height);
int allocRenderBuffers(int w, int h, int f);
void freeRenderBuffers();
int clear (private_handle_t* hnd, hwc_rect_t& rect);
private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS];
// Index of the current intermediate render buffer
int mCurRenderBufferIndex;
//These are the the release FDs of the T-2 and T-1 round
//We wait on the T-2 fence
int mRelFd[2];
//Dynamic composition threshold for deciding copybit usage.
double mDynThreshold;
};
}; //namespace qhwc
#endif //HWC_COPYBIT_H