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;
217c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Guptaimport com.android.tools.layoutlib.java.System_Delegate;
222eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
232eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet/**
242eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Delegate implementing the native methods of android.os.SystemClock
252eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
262eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Through the layoutlib_create tool, the original native methods of SystemClock have been replaced
272eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * by calls to methods of the same name in this delegate class.
282eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
292eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * Because it's a stateless class to start with, there's no need to keep a {@link DelegateManager}
302eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet * around to map int to instance of the delegate.
312eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet *
322eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet */
332eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohetpublic class SystemClock_Delegate {
342eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /**
352eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * Returns milliseconds since boot, not counting time spent in deep sleep.
362eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * <b>Note:</b> This value may get reset occasionally (before it would
372eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * otherwise wrap around).
382eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     *
392eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * @return milliseconds of non-sleep uptime since boot.
402eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     */
419a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet    @LayoutlibDelegate
422eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /*package*/ static long uptimeMillis() {
437c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Gupta        return System_Delegate.currentTimeMillis() - System_Delegate.bootTimeMillis();
442eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
452eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
462eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /**
472eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * Returns milliseconds since boot, including time spent in sleep.
482eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     *
492eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * @return elapsed milliseconds since boot.
502eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     */
519a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet    @LayoutlibDelegate
522eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /*package*/ static long elapsedRealtime() {
537c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Gupta        return System_Delegate.currentTimeMillis() - System_Delegate.bootTimeMillis();
542eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
552eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet
562eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /**
575eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet     * Returns nanoseconds since boot, including time spent in sleep.
585eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet     *
595eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet     * @return elapsed nanoseconds since boot.
605eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet     */
615eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet    @LayoutlibDelegate
626dfd0b39a63559999a769f93d5cdb48abe675344Xavier Ducrohet    /*package*/ static long elapsedRealtimeNanos() {
637c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Gupta        return System_Delegate.nanoTime() - System_Delegate.bootTime();
645eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet    }
655eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet
665eb51defe39f765d6ebe868dba7f187f7dd990f6Xavier Ducrohet    /**
672eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * Returns milliseconds running in the current thread.
682eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     *
692eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     * @return elapsed milliseconds in the thread
702eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet     */
719a4fe29c8d92014d2d9a848e9116b8cc9d0842f9Xavier Ducrohet    @LayoutlibDelegate
722eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    /*package*/ static long currentThreadTimeMillis() {
737c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Gupta        return System_Delegate.currentTimeMillis();
742eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet    }
757f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet
767f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    /**
777f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * Returns microseconds running in the current thread.
787f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     *
797f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * @return elapsed microseconds in the thread
807f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     *
817f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * @hide
827f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     */
837f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    @LayoutlibDelegate
847f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    /*package*/ static long currentThreadTimeMicro() {
857c4420bd04f8f56f6044f88e34616d8c5d96c7e9Deepanshu Gupta        return System_Delegate.currentTimeMillis() * 1000;
867f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    }
877f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet
887f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    /**
897f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * Returns current wall time in  microseconds.
907f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     *
917f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * @return elapsed microseconds in wall time
927f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     *
937f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     * @hide
947f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet     */
957f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    @LayoutlibDelegate
967f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    /*package*/ static long currentTimeMicro() {
977f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet        return elapsedRealtime() * 1000;
987f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    }
992eea6fab1cbb0a5c8f913491c2d622c904759893Xavier Ducrohet}
100