1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/*
2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *
4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Redistribution and use in source and binary forms, with or without
5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * modification, are permitted provided that the following conditions are
6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * met:
7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Redistributions of source code must retain the above copyright
8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     notice, this list of conditions and the following disclaimer.
9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Redistributions in binary form must reproduce the above
10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     copyright notice, this list of conditions and the following
11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     disclaimer in the documentation and/or other materials provided
12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     with the distribution.
13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *   * Neither the name of The Linux Foundation or the names of its
14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     contributors may be used to endorse or promote products derived
15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *     from this software without specific prior written permission.
16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin *
17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */
29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef INCLUDE_LIBQCOM_COMPTYPES
31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define INCLUDE_LIBQCOM_COMPTYPES
32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <stdint.h>
34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <utils/Singleton.h>
35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <cutils/properties.h>
36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinusing namespace android;
38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinnamespace qdutils {
39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin// Enum containing the supported composition types
40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinenum {
41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    COMPOSITION_TYPE_GPU = 0,
42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    COMPOSITION_TYPE_MDP = 0x1,
43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    COMPOSITION_TYPE_C2D = 0x2,
44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    COMPOSITION_TYPE_CPU = 0x4,
45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    COMPOSITION_TYPE_DYN = 0x8
46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin};
47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* This class caches the composition type
49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */
50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinclass QCCompositionType : public Singleton <QCCompositionType>
51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{
52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    public:
53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        QCCompositionType();
54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        ~QCCompositionType() { }
55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        int getCompositionType() {return mCompositionType;}
56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    private:
57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        int mCompositionType;
58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin};
60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjininline QCCompositionType::QCCompositionType()
62054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin{
63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    char property[PROPERTY_VALUE_MAX];
64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    mCompositionType = COMPOSITION_TYPE_GPU;
65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    if (property_get("debug.composition.type", property, "gpu") > 0) {
66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        if ((strncmp(property, "mdp", 3)) == 0) {
67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin            mCompositionType = COMPOSITION_TYPE_MDP;
68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        } else if ((strncmp(property, "c2d", 3)) == 0) {
69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin            mCompositionType = COMPOSITION_TYPE_C2D;
70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        } else if ((strncmp(property, "dyn", 3)) == 0) {
71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifdef USE_MDP3
72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin            mCompositionType = COMPOSITION_TYPE_DYN | COMPOSITION_TYPE_MDP;
73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#else
74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin            mCompositionType = COMPOSITION_TYPE_DYN | COMPOSITION_TYPE_C2D;
75054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif
76054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin        }
77054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin    }
78054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin}
79054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin
80054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin}; //namespace qdutils
81054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif //INCLUDE_LIBQCOM_COMPTYPES
82