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