12eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet/* 22eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Copyright (C) 2010 The Android Open Source Project 32eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 42eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 52eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * you may not use this file except in compliance with the License. 62eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * You may obtain a copy of the License at 72eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 82eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 92eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 102eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 112eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 122eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * See the License for the specific language governing permissions and 142eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * limitations under the License. 152eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */ 162eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 172eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetpackage android.os; 182eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 192eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetimport com.android.layoutlib.bridge.impl.DelegateManager; 209a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohetimport com.android.tools.layoutlib.annotations.LayoutlibDelegate; 212eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 222eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet/** 232eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Delegate implementing the native methods of android.os.SystemClock 242eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 252eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of SystemClock have been replaced 262eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * by calls to methods of the same name in this delegate class. 272eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 282eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager} 292eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * around to map int to instance of the delegate. 302eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 312eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */ 322eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetpublic class SystemClock_Delegate { 332eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet private static long sBootTime = System.currentTimeMillis(); 345eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet private static long sBootTimeNano = System.nanoTime(); 352eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 369a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 372eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /*package*/ static boolean setCurrentTimeMillis(long millis) { 382eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet return true; 392eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet } 402eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 412eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /** 422eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Returns milliseconds since boot, not counting time spent in deep sleep. 432eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * <b>Note:</b> This value may get reset occasionally (before it would 442eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * otherwise wrap around). 452eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 462eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * @return milliseconds of non-sleep uptime since boot. 472eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */ 489a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 492eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /*package*/ static long uptimeMillis() { 502eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet return System.currentTimeMillis() - sBootTime; 512eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet } 522eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 532eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /** 542eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Returns milliseconds since boot, including time spent in sleep. 552eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 562eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * @return elapsed milliseconds since boot. 572eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */ 589a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 592eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /*package*/ static long elapsedRealtime() { 602eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet return System.currentTimeMillis() - sBootTime; 612eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet } 622eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet 632eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /** 645eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet * Returns nanoseconds since boot, including time spent in sleep. 655eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet * 665eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet * @return elapsed nanoseconds since boot. 675eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet */ 685eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet @LayoutlibDelegate 696dfd0b39a63559999a769f93d5cdb48abe675344Xavier Ducrohet /*package*/ static long elapsedRealtimeNanos() { 705eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet return System.nanoTime() - sBootTimeNano; 715eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet } 725eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet 735eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet /** 742eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Returns milliseconds running in the current thread. 752eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * 762eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * @return elapsed milliseconds in the thread 772eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */ 789a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet @LayoutlibDelegate 792eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet /*package*/ static long currentThreadTimeMillis() { 802eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet return System.currentTimeMillis(); 812eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet } 827f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet 837f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet /** 847f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * Returns microseconds running in the current thread. 857f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * 867f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * @return elapsed microseconds in the thread 877f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * 887f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * @hide 897f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet */ 907f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet @LayoutlibDelegate 917f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet /*package*/ static long currentThreadTimeMicro() { 927f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet return System.currentTimeMillis() * 1000; 937f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet } 947f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet 957f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet /** 967f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * Returns current wall time in microseconds. 977f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * 987f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * @return elapsed microseconds in wall time 997f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * 1007f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet * @hide 1017f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet */ 1027f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet @LayoutlibDelegate 1037f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet /*package*/ static long currentTimeMicro() { 1047f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet return elapsedRealtime() * 1000; 1057f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet } 1062eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet} 107