19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright 2014 The WebRTC Project Authors. All rights reserved. 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use of this source code is governed by a BSD-style license 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that can be found in the LICENSE file in the root of the source 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tree. An additional intellectual property rights grant can be found 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the file PATENTS. All contributing project authors may 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be found in the AUTHORS file in the root of the source tree. 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage org.appspot.apprtc.util; 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Build; 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AppRTCUtils provides helper functions for managing thread safety. 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class AppRTCUtils { 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AppRTCUtils() { 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NonThreadSafe is a helper class used to help verify that methods of a 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class are called from the same thread. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public static class NonThreadSafe { 2955280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn private final Long threadId; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NonThreadSafe() { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Store thread ID of the creating thread. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project threadId = Thread.currentThread().getId(); 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Checks if the method is called on the valid/creating thread. */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean calledOnValidThread() { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return threadId.equals(Thread.currentThread().getId()); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Helper method which throws an exception when an assertion has failed. */ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void assertIsTrue(boolean condition) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!condition) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new AssertionError("Expected condition to be true"); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Helper method for building a string of thread information.*/ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String getThreadInfo() { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "@[name=" + Thread.currentThread().getName() 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", id=" + Thread.currentThread().getId() + "]"; 5355280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn } 5455280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn 5555280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn /** Information about the current build, taken from system properties. */ 5655280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn public static void logDeviceInfo(String tag) { 5755280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn Log.d(tag, "Android SDK: " + Build.VERSION.SDK_INT + ", " 5855280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn + "Release: " + Build.VERSION.RELEASE + ", " 5955280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn + "Brand: " + Build.BRAND + ", " 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Device: " + Build.DEVICE + ", " 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Id: " + Build.ID + ", " 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Hardware: " + Build.HARDWARE + ", " 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Manufacturer: " + Build.MANUFACTURER + ", " 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Model: " + Build.MODEL + ", " 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "Product: " + Build.PRODUCT); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project