143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor/*
243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * Copyright (C) 2010 The Android Open Source Project
343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor *
443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * Licensed under the Apache License, Version 2.0 (the "License");
543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * you may not use this file except in compliance with the License.
643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * You may obtain a copy of the License at
743fe81bc2c186e49b25762450003276a7ed0002dDan Egnor *
843fe81bc2c186e49b25762450003276a7ed0002dDan Egnor *      http://www.apache.org/licenses/LICENSE-2.0
943fe81bc2c186e49b25762450003276a7ed0002dDan Egnor *
1043fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * Unless required by applicable law or agreed to in writing, software
1143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * distributed under the License is distributed on an "AS IS" BASIS,
1243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * See the License for the specific language governing permissions and
1443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * limitations under the License.
1543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor */
1643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
1743fe81bc2c186e49b25762450003276a7ed0002dDan Egnorpackage android.os;
1843fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
1943fe81bc2c186e49b25762450003276a7ed0002dDan Egnorimport android.app.Service;
2043fe81bc2c186e49b25762450003276a7ed0002dDan Egnorimport android.content.Intent;
2143fe81bc2c186e49b25762450003276a7ed0002dDan Egnorimport android.text.TextUtils;
2243fe81bc2c186e49b25762450003276a7ed0002dDan Egnorimport android.util.Log;
2343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
2443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor/**
2543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * Service used by {@link BinderThreadPriorityTest} to verify
2643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor * the conveyance of thread priorities over Binder.
2743fe81bc2c186e49b25762450003276a7ed0002dDan Egnor */
2843fe81bc2c186e49b25762450003276a7ed0002dDan Egnorpublic class BinderThreadPriorityService extends Service {
2943fe81bc2c186e49b25762450003276a7ed0002dDan Egnor    private static final String TAG = "BinderThreadPriorityService";
3043fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
3143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor    private final IBinderThreadPriorityService.Stub mBinder =
3243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            new IBinderThreadPriorityService.Stub() {
3343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        public int getThreadPriority() {
3443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            return Process.getThreadPriority(Process.myTid());
3543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        }
3643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
3743fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        public String getThreadSchedulerGroup() {
3843fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            return BinderThreadPriorityTest.getSchedulerGroup();
3943fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        }
4043fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
4143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        public void callBack(IBinderThreadPriorityService recurse) {
4243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            try {
4343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor                recurse.callBack(this);
4443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            } catch (RemoteException e) {
4543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor                Log.e(TAG, "Binder callback failed", e);
4643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            }
4743fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        }
4843fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
4943fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        public void setPriorityAndCallBack(int priority, IBinderThreadPriorityService recurse) {
5043fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            Process.setThreadPriority(priority);
5143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            try {
5243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor                recurse.callBack(this);
5343fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            } catch (RemoteException e) {
5443fe81bc2c186e49b25762450003276a7ed0002dDan Egnor                Log.e(TAG, "Binder callback failed", e);
5543fe81bc2c186e49b25762450003276a7ed0002dDan Egnor            }
5643fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        }
5743fe81bc2c186e49b25762450003276a7ed0002dDan Egnor    };
5843fe81bc2c186e49b25762450003276a7ed0002dDan Egnor
5943fe81bc2c186e49b25762450003276a7ed0002dDan Egnor    public IBinder onBind(Intent intent) {
6043fe81bc2c186e49b25762450003276a7ed0002dDan Egnor        return mBinder;
6143fe81bc2c186e49b25762450003276a7ed0002dDan Egnor    }
6243fe81bc2c186e49b25762450003276a7ed0002dDan Egnor}
63