diff options
author | Raj Kamal <rkamal@codeaurora.org> | 2015-06-23 12:55:15 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:22:25 -0600 |
commit | 20f9ced88123b0daca067ca55f1dc96c8b7b02e3 (patch) | |
tree | 774e7b179ead74ef6b9fb8f7566c75c02c466b60 /services/surfaceflinger/DisplayUtils.cpp | |
parent | 8eaa19460dcaaead5987332580ac338e20af456b (diff) | |
download | frameworks_native-20f9ced88123b0daca067ca55f1dc96c8b7b02e3.zip frameworks_native-20f9ced88123b0daca067ca55f1dc96c8b7b02e3.tar.gz frameworks_native-20f9ced88123b0daca067ca55f1dc96c8b7b02e3.tar.bz2 |
SurfaceFlinger: Add support for DisplayUtils
Add DisplayUtils class which uses the custom implementations
of ExLayer, ExSurfaceFlinger, ExHWComposer,
and ExVirtualDisplaySurface classes if needed
Change-Id: Ibdd8da5d3d0d602f42b76a15d0994c6aa98bee3f
Diffstat (limited to 'services/surfaceflinger/DisplayUtils.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayUtils.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/services/surfaceflinger/DisplayUtils.cpp b/services/surfaceflinger/DisplayUtils.cpp new file mode 100644 index 0000000..3937df0 --- /dev/null +++ b/services/surfaceflinger/DisplayUtils.cpp @@ -0,0 +1,106 @@ +/* Copyright (c) 2015, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdlib.h> +#include <stdint.h> +#include <sys/types.h> + +#include <utils/Errors.h> +#include <utils/Log.h> + +#include <ui/GraphicBuffer.h> + +#include "DisplayUtils.h" +#include <ExSurfaceFlinger.h> +#include <ExLayer.h> +#include <DisplayHardware/ExHWComposer.h> +#include <DisplayHardware/ExVirtualDisplaySurface.h> +#include <dlfcn.h> + +namespace android { + +DisplayUtils* DisplayUtils::sDisplayUtils = NULL; +bool DisplayUtils::sUseExtendedImpls = false; + +DisplayUtils::DisplayUtils() { +#ifdef QTI_BSP + sUseExtendedImpls = true; +#endif +} + +DisplayUtils* DisplayUtils::getInstance() { + if(sDisplayUtils == NULL) { + sDisplayUtils = new DisplayUtils(); + } + return sDisplayUtils; +} + +SurfaceFlinger* DisplayUtils::getSFInstance() { + if(sUseExtendedImpls) { + return new ExSurfaceFlinger(); + } else { + return new SurfaceFlinger(); + } +} + +Layer* DisplayUtils::getLayerInstance(SurfaceFlinger* flinger, + const sp<Client>& client, const String8& name, + uint32_t w, uint32_t h, uint32_t flags) { + if(sUseExtendedImpls) { + return new ExLayer(flinger, client, name, w, h, flags); + } else { + return new Layer(flinger, client, name, w, h, flags); + } +} + +HWComposer* DisplayUtils::getHWCInstance( + const sp<SurfaceFlinger>& flinger, + HWComposer::EventHandler& handler) { + if(sUseExtendedImpls) { + return new ExHWComposer(flinger, handler); + } else { + return new HWComposer(flinger,handler); + } +} + +VirtualDisplaySurface* DisplayUtils::getVDSInstance(HWComposer* hwc, int32_t hwcDisplayId, + sp<IGraphicBufferProducer> currentStateSurface, sp<IGraphicBufferProducer> bqProducer, + sp<IGraphicBufferConsumer> bqConsumer, String8 currentStateDisplayName, + bool currentStateIsSecure) +{ + if(sUseExtendedImpls) { + return new ExVirtualDisplaySurface(*hwc, hwcDisplayId, currentStateSurface, bqProducer, + bqConsumer, currentStateDisplayName, currentStateIsSecure); + } else { + return new VirtualDisplaySurface(*hwc, hwcDisplayId, currentStateSurface, bqProducer, + bqConsumer, currentStateDisplayName); + } +} + +}; // namespace android + |