aboutsummaryrefslogtreecommitdiffstats
path: root/cm/jni/src/org_cyanogenmod_platform_internal_PerformanceManagerService.cpp
blob: 71c05771f62908c710386910211a77b5db0903e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
**
** Copyright 2016, The CyanogenMod Project
**
** 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.
*/

//#define LOG_NDEBUG 0

#define LOG_TAG "PerformanceManagerService-JNI"

#include <utils/Log.h>

#include <JNIHelp.h>
#include <jni.h>
#include "core_jni_helpers.h"

#include <hardware/power.h>

// ----------------------------------------------------------------------------

namespace android {

static const char* const kClassPathName =
    "org/cyanogenmod/platform/internal/PerformanceManagerService";

static struct power_module* gPowerModule;

// ----------------------------------------------------------------------------

static void
org_cyanogenmod_platform_internal_PerformanceManagerService_launchBoost(
        JNIEnv *env, jobject thiz, jint pid, jstring jPackageName)
{
    if (env == NULL || jPackageName == NULL) {
        return;
    }

    if (gPowerModule && gPowerModule->powerHint) {
        const char *packageName = env->GetStringUTFChars(jPackageName, 0);
        launch_boost_info_t *info = (launch_boost_info_t *)malloc(sizeof(launch_boost_info_t));
        info->pid = pid;
        info->packageName = packageName;
        gPowerModule->powerHint(gPowerModule, POWER_HINT_LAUNCH_BOOST, (void *)info);
        ALOGV("Sent LAUNCH BOOST for %s (pid=%d)", info->packageName, info->pid);

        env->ReleaseStringUTFChars(jPackageName, packageName);
        free(info);
    }
}

// ----------------------------------------------------------------------------

static JNINativeMethod gMethods[] = {
     {"native_launchBoost", "(ILjava/lang/String;)V",
            (void *)org_cyanogenmod_platform_internal_PerformanceManagerService_launchBoost},
};

int register_org_cyanogenmod_platform_internal_PerformanceManagerService(JNIEnv *env)
{
    status_t err = hw_get_module(POWER_HARDWARE_MODULE_ID,
            (hw_module_t const**)&gPowerModule);
    if (!err) {
        gPowerModule->init(gPowerModule);
    } else {
        ALOGE("Couldn't load %s module (%s)", POWER_HARDWARE_MODULE_ID, strerror(-err));
    }

    return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods));
}

} /* namespace android */