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