diff options
-rw-r--r-- | preloaded-classes | 1523 | ||||
-rw-r--r-- | tools/preload/20090811.compiled | bin | 15749051 -> 15943336 bytes | |||
-rw-r--r-- | tools/preload/Android.mk | 2 | ||||
-rw-r--r-- | tools/preload/ClassRank.java | 53 | ||||
-rw-r--r-- | tools/preload/LoadedClass.java | 51 | ||||
-rw-r--r-- | tools/preload/MemoryUsage.java | 37 | ||||
-rw-r--r-- | tools/preload/Policy.java | 41 | ||||
-rw-r--r-- | tools/preload/PrintCsv.java | 131 | ||||
-rw-r--r-- | tools/preload/PrintHtmlDiff.java | 142 | ||||
-rw-r--r-- | tools/preload/Proc.java | 76 | ||||
-rw-r--r-- | tools/preload/Root.java | 2 | ||||
-rw-r--r-- | tools/preload/WritePreloadedClassFile.java | 98 | ||||
-rw-r--r-- | tools/preload/loadclass/LoadClass.java | 4 | ||||
-rw-r--r-- | tools/preload/preload.ipr | 24 | ||||
-rw-r--r-- | tools/preload/sorttable.js | 493 |
15 files changed, 1071 insertions, 1606 deletions
diff --git a/preloaded-classes b/preloaded-classes index 7d1f960..69c596c 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -1,119 +1,66 @@ # Classes which are preloaded by com.android.internal.os.ZygoteInit. -# Automatically generated by /frameworks/base/tools/preload. -# percent=75, weight=500, bucket_size=5 +# Automatically generated by frameworks/base/tools/preload/WritePreloadedClassFile.java. +# MIN_LOAD_TIME_MICROS=1250 SQLite.Blob SQLite.Database SQLite.FunctionContext SQLite.Stmt SQLite.Vm android.R$styleable -android.accounts.AccountMonitor -android.accounts.AccountMonitor$AccountUpdater -android.accounts.AccountMonitorListener -android.accounts.AccountsServiceConstants -android.accounts.IAccountsService android.accounts.IAccountsService$Stub android.app.Activity -android.app.Activity$ManagedCursor android.app.ActivityGroup +android.app.ActivityManager +android.app.ActivityManager$MemoryInfo android.app.ActivityManagerNative android.app.ActivityManagerProxy android.app.ActivityThread -android.app.ActivityThread$ActivityRecord -android.app.ActivityThread$AppBindData android.app.ActivityThread$ApplicationThread -android.app.ActivityThread$BindServiceData -android.app.ActivityThread$ContextCleanupInfo -android.app.ActivityThread$CreateServiceData -android.app.ActivityThread$GcIdler android.app.ActivityThread$H -android.app.ActivityThread$Idler -android.app.ActivityThread$NewIntentData -android.app.ActivityThread$PackageInfo -android.app.ActivityThread$PackageInfo$ReceiverDispatcher -android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args -android.app.ActivityThread$PackageInfo$ReceiverDispatcher$InnerReceiver -android.app.ActivityThread$PackageInfo$ServiceDispatcher -android.app.ActivityThread$PackageInfo$ServiceDispatcher$ConnectionInfo -android.app.ActivityThread$PackageInfo$ServiceDispatcher$DeathMonitor -android.app.ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection -android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection -android.app.ActivityThread$ProviderRecord -android.app.ActivityThread$ProviderRefCount -android.app.ActivityThread$ReceiverData -android.app.ActivityThread$ResourcesKey -android.app.ActivityThread$ResultData -android.app.ActivityThread$ServiceArgsData -android.app.ActivityThread$StopInfo android.app.AlertDialog -android.app.AlertDialog$Builder android.app.Application android.app.ApplicationContext android.app.ApplicationContext$ApplicationContentResolver android.app.ApplicationContext$ApplicationPackageManager -android.app.ApplicationContext$ApplicationPackageManager$PackageRemovedReceiver -android.app.ApplicationContext$ApplicationPackageManager$ResourceName -android.app.ApplicationContext$SharedPreferencesImpl -android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl -android.app.ApplicationLoaders +android.app.ApplicationContext$WallpaperCallback android.app.ApplicationThreadNative +android.app.DatePickerDialog android.app.Dialog -android.app.Dialog$1 -android.app.Dialog$ListenersHandler android.app.ExpandableListActivity android.app.IActivityManager android.app.IActivityManager$ContentProviderHolder -android.app.IActivityManager$ContentProviderHolder$1 -android.app.IAlarmManager android.app.IAlarmManager$Stub -android.app.IAlarmManager$Stub$Proxy -android.app.IApplicationThread -android.app.IInstrumentationWatcher -android.app.IInstrumentationWatcher$Stub -android.app.INotificationManager android.app.INotificationManager$Stub -android.app.INotificationManager$Stub$Proxy -android.app.ISearchManager android.app.ISearchManager$Stub -android.app.ISearchManager$Stub$Proxy -android.app.ISearchManagerCallback android.app.ISearchManagerCallback$Stub -android.app.IServiceConnection -android.app.IServiceConnection$Stub -android.app.ITransientNotification +android.app.IStatusBar$Stub android.app.ITransientNotification$Stub +android.app.IWallpaperService$Stub +android.app.IWallpaperServiceCallback$Stub android.app.Instrumentation -android.app.IntentReceiverLeaked +android.app.IntentService android.app.ListActivity -android.app.ListActivity$1 -android.app.ListActivity$2 android.app.LocalActivityManager -android.app.LocalActivityManager$LocalActivityRecord android.app.Notification -android.app.Notification$1 -android.app.NotificationManager android.app.PendingIntent -android.app.PendingIntent$1 android.app.ProgressDialog -android.app.ReceiverRestrictedContext android.app.ResultInfo -android.app.ResultInfo$1 android.app.SearchManager$SearchManagerCallback -android.app.SearchManager$SearchManagerCallback$1 -android.app.SearchManager$SearchManagerCallback$2 android.app.Service -android.app.ServiceConnectionLeaked +android.app.StatusBarManager android.app.TabActivity +android.app.TimePickerDialog +android.appwidget.AppWidgetHost android.appwidget.AppWidgetHostView android.appwidget.AppWidgetManager android.appwidget.AppWidgetProvider +android.appwidget.AppWidgetProviderInfo android.backup.BackupDataInput android.backup.BackupDataInput$EntityHeader android.backup.BackupDataOutput android.backup.BackupHelperDispatcher android.backup.BackupHelperDispatcher$Header android.backup.FileBackupHelperBase -android.bluetooth.BluetoothA2dp android.bluetooth.BluetoothAudioGateway android.bluetooth.BluetoothDevice android.bluetooth.Database @@ -125,89 +72,44 @@ android.bluetooth.IBluetoothDevice$Stub android.bluetooth.IBluetoothDevice$Stub$Proxy android.bluetooth.RfcommSocket android.bluetooth.ScoSocket -android.content.AsyncQueryHandler -android.content.AsyncQueryHandler$WorkerArgs -android.content.AsyncQueryHandler$WorkerHandler -android.content.BroadcastReceiver -android.content.ComponentCallbacks +android.content.AbstractSyncableContentProvider +android.content.AbstractTableMerger android.content.ComponentName -android.content.ComponentName$1 -android.content.ContentProvider android.content.ContentProvider$Transport -android.content.ContentProviderNative -android.content.ContentProviderProxy -android.content.ContentQueryMap -android.content.ContentQueryMap$1 android.content.ContentResolver android.content.ContentResolver$CursorWrapperInner -android.content.ContentResolver$ParcelFileDescriptorInner -android.content.ContentUris android.content.ContentValues -android.content.ContentValues$1 android.content.Context android.content.ContextWrapper -android.content.DialogInterface -android.content.DialogInterface$OnCancelListener -android.content.DialogInterface$OnClickListener -android.content.DialogInterface$OnDismissListener -android.content.DialogInterface$OnKeyListener android.content.DialogInterface$OnMultiChoiceClickListener -android.content.IContentProvider -android.content.IContentService android.content.IContentService$Stub -android.content.IContentService$Stub$Proxy -android.content.IIntentReceiver -android.content.IIntentReceiver$Stub -android.content.IIntentSender -android.content.IIntentSender$Stub -android.content.IIntentSender$Stub$Proxy -android.content.ISyncAdapter android.content.ISyncAdapter$Stub android.content.Intent -android.content.Intent$1 +android.content.Intent$ShortcutIconResource android.content.IntentFilter -android.content.IntentFilter$1 -android.content.SearchRecentSuggestionsProvider -android.content.SearchRecentSuggestionsProvider$DatabaseHelper -android.content.ServiceConnection -android.content.SharedPreferences -android.content.SharedPreferences$Editor -android.content.SharedPreferences$OnSharedPreferenceChangeListener -android.content.SyncAdapter android.content.SyncAdapter$Transport -android.content.SyncContext android.content.SyncResult +android.content.SyncStateContentProviderHelper android.content.SyncStats +android.content.SyncableContentProvider +android.content.TempProviderSyncAdapter android.content.UriMatcher android.content.pm.ActivityInfo -android.content.pm.ActivityInfo$1 android.content.pm.ApplicationInfo -android.content.pm.ApplicationInfo$1 -android.content.pm.ComponentInfo android.content.pm.ConfigurationInfo -android.content.pm.ConfigurationInfo$1 +android.content.pm.IPackageDataObserver$Stub android.content.pm.IPackageDeleteObserver$Stub -android.content.pm.IPackageManager android.content.pm.IPackageManager$Stub android.content.pm.IPackageManager$Stub$Proxy +android.content.pm.IPackageStatsObserver$Stub android.content.pm.InstrumentationInfo -android.content.pm.InstrumentationInfo$1 android.content.pm.PackageInfo -android.content.pm.PackageInfo$1 -android.content.pm.PackageItemInfo android.content.pm.PackageManager +android.content.pm.PackageStats android.content.pm.PathPermission -android.content.pm.PathPermission$1 android.content.pm.PermissionInfo -android.content.pm.PermissionInfo$1 -android.content.pm.ProviderInfo -android.content.pm.ProviderInfo$1 android.content.pm.ResolveInfo -android.content.pm.ResolveInfo$1 -android.content.pm.ServiceInfo -android.content.pm.ServiceInfo$1 android.content.pm.Signature -android.content.pm.Signature$1 android.content.res.AssetFileDescriptor android.content.res.AssetFileDescriptor$1 android.content.res.AssetManager @@ -216,65 +118,38 @@ android.content.res.ColorStateList android.content.res.ColorStateList$1 android.content.res.CompatibilityInfo android.content.res.CompatibilityInfo$1 -android.content.res.CompatibilityInfo$Translator android.content.res.Configuration android.content.res.Configuration$1 -android.content.res.PluralRules -android.content.res.PluralRules$en android.content.res.Resources android.content.res.Resources$1 -android.content.res.Resources$Theme android.content.res.StringBlock -android.content.res.StringBlock$StyleIDs android.content.res.TypedArray android.content.res.XmlBlock android.content.res.XmlBlock$Parser android.content.res.XmlResourceParser android.database.AbstractCursor -android.database.AbstractCursor$SelfContentObserver android.database.AbstractWindowedCursor -android.database.BulkCursorNative -android.database.BulkCursorProxy android.database.BulkCursorToCursorAdaptor android.database.CharArrayBuffer -android.database.ContentObservable -android.database.ContentObserver -android.database.ContentObserver$NotificationRunnable -android.database.ContentObserver$Transport -android.database.CrossProcessCursor -android.database.Cursor +android.database.CursorJoiner$Result android.database.CursorToBulkCursorAdaptor -android.database.CursorToBulkCursorAdaptor$ContentObserverProxy android.database.CursorWindow android.database.CursorWindow$1 android.database.CursorWrapper -android.database.DataSetObservable -android.database.DataSetObserver android.database.DatabaseUtils -android.database.DatabaseUtils$InsertHelper -android.database.IBulkCursor -android.database.IContentObserver -android.database.IContentObserver$Stub -android.database.IContentObserver$Stub$Proxy android.database.MatrixCursor -android.database.Observable -android.database.SQLException +android.database.MergeCursor android.database.sqlite.SQLiteClosable android.database.sqlite.SQLiteCursor -android.database.sqlite.SQLiteCursorDriver android.database.sqlite.SQLiteDatabase -android.database.sqlite.SQLiteDatabase$CursorFactory +android.database.sqlite.SQLiteDatabase$ConflictAlgorithm android.database.sqlite.SQLiteDebug android.database.sqlite.SQLiteDebug$PagerStats android.database.sqlite.SQLiteDirectCursorDriver -android.database.sqlite.SQLiteException -android.database.sqlite.SQLiteOpenHelper android.database.sqlite.SQLiteProgram android.database.sqlite.SQLiteQuery android.database.sqlite.SQLiteQueryBuilder android.database.sqlite.SQLiteStatement -android.ddm.DdmHandleAppName -android.ddm.DdmHandleExit android.ddm.DdmHandleHeap android.ddm.DdmHandleHello android.ddm.DdmHandleNativeHeap @@ -294,7 +169,6 @@ android.graphics.BitmapShader android.graphics.BlurMaskFilter android.graphics.Camera android.graphics.Canvas -android.graphics.Canvas$EdgeType android.graphics.Color android.graphics.ColorFilter android.graphics.ColorMatrixColorFilter @@ -311,7 +185,6 @@ android.graphics.LightingColorFilter android.graphics.LinearGradient android.graphics.MaskFilter android.graphics.Matrix -android.graphics.Matrix$ScaleToFit android.graphics.Movie android.graphics.NinePatch android.graphics.Paint @@ -323,7 +196,6 @@ android.graphics.Paint$Join android.graphics.Paint$Style android.graphics.PaintFlagsDrawFilter android.graphics.Path -android.graphics.Path$Direction android.graphics.Path$FillType android.graphics.PathDashPathEffect android.graphics.PathEffect @@ -350,7 +222,6 @@ android.graphics.Shader android.graphics.Shader$TileMode android.graphics.SumPathEffect android.graphics.SweepGradient -android.graphics.TemporaryBuffer android.graphics.Typeface android.graphics.Xfermode android.graphics.drawable.Animatable @@ -370,7 +241,6 @@ android.graphics.drawable.Drawable$ConstantState android.graphics.drawable.DrawableContainer android.graphics.drawable.DrawableContainer$DrawableContainerState android.graphics.drawable.GradientDrawable -android.graphics.drawable.GradientDrawable$1 android.graphics.drawable.GradientDrawable$GradientState android.graphics.drawable.GradientDrawable$Orientation android.graphics.drawable.LayerDrawable @@ -379,55 +249,38 @@ android.graphics.drawable.LayerDrawable$LayerState android.graphics.drawable.NinePatchDrawable android.graphics.drawable.NinePatchDrawable$NinePatchState android.graphics.drawable.PaintDrawable +android.graphics.drawable.RotateDrawable android.graphics.drawable.ShapeDrawable -android.graphics.drawable.ShapeDrawable$ShapeState android.graphics.drawable.StateListDrawable android.graphics.drawable.StateListDrawable$StateListState android.graphics.drawable.TransitionDrawable android.graphics.drawable.TransitionDrawable$TransitionState -android.graphics.drawable.shapes.RectShape android.graphics.drawable.shapes.RoundRectShape -android.graphics.drawable.shapes.Shape android.hardware.Camera -android.hardware.ISensorService android.hardware.ISensorService$Stub -android.hardware.ISensorService$Stub$Proxy -android.hardware.Sensor -android.hardware.SensorEvent -android.hardware.SensorEventListener -android.hardware.SensorListener android.hardware.SensorManager -android.hardware.SensorManager$1 -android.hardware.SensorManager$LegacyListener -android.hardware.SensorManager$ListenerDelegate -android.hardware.SensorManager$ListenerDelegate$1 -android.hardware.SensorManager$LmsFilter -android.hardware.SensorManager$SensorThread -android.hardware.SensorManager$SensorThread$SensorThreadRunnable +android.inputmethodservice.AbstractInputMethodService +android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl +android.inputmethodservice.ExtractButton android.inputmethodservice.ExtractEditText +android.inputmethodservice.IInputMethodSessionWrapper +android.inputmethodservice.IInputMethodSessionWrapper$InputMethodEventCallbackWrapper +android.inputmethodservice.IInputMethodWrapper android.inputmethodservice.InputMethodService +android.inputmethodservice.Keyboard +android.inputmethodservice.Keyboard$Key android.inputmethodservice.KeyboardView +android.inputmethodservice.KeyboardView$2 android.location.Address -android.location.Address$1 -android.location.Geocoder -android.location.GpsSatellite -android.location.GpsStatus -android.location.GpsStatus$1 -android.location.ILocationListener -android.location.ILocationListener$Stub -android.location.ILocationManager +android.location.Criteria android.location.ILocationManager$Stub android.location.ILocationManager$Stub$Proxy android.location.ILocationProvider android.location.ILocationProvider$Stub android.location.Location -android.location.Location$1 -android.location.LocationListener android.location.LocationManager android.location.LocationManager$ListenerTransport -android.location.LocationManager$ListenerTransport$1 -android.location.LocationProvider -android.media.AmrInputStream +android.location.LocationManager$LpPowerComparator android.media.AudioFormat android.media.AudioManager android.media.AudioRecord @@ -435,70 +288,56 @@ android.media.AudioSystem android.media.AudioTrack android.media.ExifInterface android.media.FaceDetector -android.media.IAudioService +android.media.FaceDetector$Face android.media.IAudioService$Stub android.media.IAudioService$Stub$Proxy android.media.JetPlayer android.media.MediaMetadataRetriever android.media.MediaPlayer -android.media.MediaPlayer$EventHandler -android.media.MediaPlayer$OnBufferingUpdateListener -android.media.MediaPlayer$OnCompletionListener -android.media.MediaPlayer$OnErrorListener -android.media.MediaPlayer$OnPreparedListener android.media.MediaRecorder android.media.MediaScanner -android.media.ResampleInputStream +android.media.MediaScanner$MyMediaScannerClient +android.media.Ringtone android.media.RingtoneManager android.media.ToneGenerator android.net.ConnectivityManager android.net.Credentials android.net.DhcpInfo android.net.DhcpInfo$1 -android.net.IConnectivityManager android.net.IConnectivityManager$Stub -android.net.IConnectivityManager$Stub$Proxy android.net.LocalServerSocket android.net.LocalSocket +android.net.LocalSocketAddress$Namespace android.net.LocalSocketImpl android.net.LocalSocketImpl$SocketInputStream android.net.LocalSocketImpl$SocketOutputStream android.net.NetworkConnectivityListener -android.net.NetworkConnectivityListener$ConnectivityBroadcastReceiver -android.net.NetworkConnectivityListener$State android.net.NetworkInfo -android.net.NetworkInfo$1 android.net.NetworkInfo$DetailedState -android.net.NetworkInfo$State android.net.NetworkUtils android.net.Uri -android.net.Uri$1 -android.net.Uri$AbstractHierarchicalUri -android.net.Uri$AbstractPart -android.net.Uri$Builder android.net.Uri$HierarchicalUri android.net.Uri$OpaqueUri android.net.Uri$Part -android.net.Uri$Part$EmptyPart -android.net.Uri$PathPart -android.net.Uri$PathSegments -android.net.Uri$PathSegmentsBuilder android.net.Uri$StringUri android.net.WebAddress android.net.http.AndroidHttpClient -android.net.http.AndroidHttpClient$1 android.net.http.AndroidHttpClient$2 -android.net.http.AndroidHttpClient$CurlLogger -android.net.http.AndroidHttpClient$LoggingConfiguration android.net.http.CertificateChainValidator +android.net.http.Connection +android.net.http.DomainNameChecker android.net.http.EventHandler android.net.http.Headers -android.net.http.Headers$HeaderCallback android.net.http.HttpsConnection +android.net.http.Request +android.net.http.RequestQueue +android.net.http.SslCertificate android.net.vpn.IVpnService$Stub +android.net.vpn.PptpProfile android.net.vpn.VpnManager +android.net.vpn.VpnProfile +android.net.vpn.VpnState android.net.vpn.VpnType -android.net.wifi.IWifiManager android.net.wifi.IWifiManager$Stub android.net.wifi.IWifiManager$Stub$Proxy android.net.wifi.WifiManager @@ -507,6 +346,7 @@ android.opengl.GLES10 android.opengl.GLES10Ext android.opengl.GLES11 android.opengl.GLES11Ext +android.opengl.GLU android.opengl.GLUtils android.opengl.Matrix android.opengl.Visibility @@ -516,7 +356,7 @@ android.os.BinderProxy android.os.Build android.os.Build$VERSION android.os.Bundle -android.os.Bundle$1 +android.os.DeadObjectException android.os.Debug android.os.Debug$MemoryInfo android.os.Environment @@ -525,126 +365,111 @@ android.os.FileObserver$ObserverThread android.os.FileUtils android.os.FileUtils$FileStatus android.os.Handler -android.os.HandlerThread android.os.Hardware android.os.IBinder -android.os.IBinder$DeathRecipient -android.os.ICheckinService android.os.ICheckinService$Stub -android.os.ICheckinService$Stub$Proxy -android.os.IHardwareService android.os.IHardwareService$Stub -android.os.IHardwareService$Stub$Proxy android.os.IInterface -android.os.IMessenger -android.os.IPowerManager +android.os.IMountService$Stub +android.os.IParentalControlCallback$Stub android.os.IPowerManager$Stub -android.os.IPowerManager$Stub$Proxy -android.os.IServiceManager android.os.Looper android.os.MemoryFile android.os.Message -android.os.Message$1 -android.os.MessageQueue -android.os.MessageQueue$IdleHandler android.os.NetStat android.os.Parcel android.os.Parcel$1 android.os.ParcelFileDescriptor android.os.ParcelFileDescriptor$1 -android.os.ParcelFileDescriptor$AutoCloseInputStream android.os.Parcelable android.os.Parcelable$Creator android.os.PatternMatcher -android.os.PatternMatcher$1 android.os.Power -android.os.PowerManager -android.os.PowerManager$WakeLock -android.os.PowerManager$WakeLock$1 android.os.Process -android.os.RemoteException -android.os.ServiceManager -android.os.ServiceManagerNative -android.os.ServiceManagerProxy +android.os.ResultReceiver android.os.StatFs android.os.SystemClock android.os.SystemProperties android.os.UEventObserver -android.os.Vibrator android.pim.EventRecurrence android.preference.CheckBoxPreference +android.preference.CheckBoxPreference$SavedState android.preference.DialogPreference android.preference.EditTextPreference -android.preference.GenericInflater -android.preference.GenericInflater$Parent android.preference.ListPreference -android.preference.ListPreference$1 -android.preference.OnDependencyChangeListener +android.preference.ListPreference$SavedState android.preference.Preference -android.preference.Preference$BaseSavedState -android.preference.Preference$BaseSavedState$1 -android.preference.Preference$OnPreferenceChangeInternalListener -android.preference.Preference$OnPreferenceChangeListener -android.preference.Preference$OnPreferenceClickListener android.preference.PreferenceActivity -android.preference.PreferenceActivity$1 -android.preference.PreferenceCategory android.preference.PreferenceGroup android.preference.PreferenceGroupAdapter -android.preference.PreferenceGroupAdapter$1 android.preference.PreferenceInflater android.preference.PreferenceManager -android.preference.PreferenceManager$OnActivityDestroyListener -android.preference.PreferenceManager$OnActivityResultListener -android.preference.PreferenceManager$OnPreferenceTreeClickListener android.preference.PreferenceScreen android.preference.RingtonePreference -android.provider.BaseColumns +android.preference.VolumePreference +android.preference.VolumePreference$SeekBarVolumizer android.provider.Browser -android.provider.Checkin +android.provider.Calendar$Attendees +android.provider.Calendar$BusyBits +android.provider.Calendar$CalendarAlerts +android.provider.Calendar$Calendars +android.provider.Calendar$Events +android.provider.Calendar$Instances +android.provider.CallLog$Calls android.provider.Checkin$Events$Tag +android.provider.Checkin$Properties android.provider.Checkin$Properties$Tag -android.provider.Checkin$Stats android.provider.Checkin$Stats$Tag +android.provider.Contacts android.provider.Contacts$ContactMethods -android.provider.Contacts$ContactMethodsColumns android.provider.Contacts$People -android.provider.Contacts$PeopleColumns android.provider.Contacts$Phones -android.provider.Contacts$PhonesColumns -android.provider.Contacts$PresenceColumns +android.provider.Contacts$Presence +android.provider.Contacts$Settings android.provider.Downloads android.provider.Gmail +android.provider.Gmail$AttachmentOrigin +android.provider.Gmail$AttachmentRendition +android.provider.Gmail$ConversationCursor +android.provider.Gmail$CursorStatus android.provider.Gmail$LabelMap +android.provider.Gmail$MessageCursor android.provider.Gmail$PersonalLevel android.provider.Gmail$Settings -android.provider.Im$CommonPresenceColumns +android.provider.Im$Account +android.provider.Im$Avatars +android.provider.Im$Chats +android.provider.Im$Contacts +android.provider.Im$LastRmqId +android.provider.Im$Messages +android.provider.Im$OutgoingRmq +android.provider.Im$Presence android.provider.Im$Provider -android.provider.MediaStore$Audio$AudioColumns +android.provider.Im$ProviderSettings +android.provider.MediaStore +android.provider.MediaStore$Audio$Albums +android.provider.MediaStore$Audio$Artists +android.provider.MediaStore$Audio$Artists$Albums android.provider.MediaStore$Audio$Media +android.provider.MediaStore$Audio$Playlists android.provider.MediaStore$Images$Media -android.provider.MediaStore$MediaColumns +android.provider.MediaStore$Images$Thumbnails android.provider.SearchRecentSuggestions android.provider.Settings$Gservices -android.provider.Settings$NameValueCache -android.provider.Settings$NameValueTable android.provider.Settings$Secure android.provider.Settings$System -android.provider.SubscribedFeeds$FeedColumns android.provider.SubscribedFeeds$Feeds -android.provider.SyncConstValue +android.provider.Telephony$Carriers android.provider.Telephony$Mms android.provider.Telephony$MmsSms android.provider.Telephony$MmsSms$PendingMessages +android.provider.Telephony$Sms +android.provider.Telephony$Sms$Conversations android.provider.Telephony$Threads +android.provider.UserDictionary android.provider.UserDictionary$Words -android.sax.Children -android.sax.Children$Child -android.sax.Element -android.sax.EndTextElementListener android.sax.RootElement android.sax.RootElement$Handler -android.sax.StartElementListener android.security.Keystore android.security.Keystore$FileKeystore android.security.Md5MessageDigest @@ -656,681 +481,324 @@ android.server.BluetoothDeviceService android.server.BluetoothEventLoop android.server.data.BuildData android.server.data.CrashData -android.server.data.StackTraceElementData android.server.data.ThrowableData android.server.search.SearchableInfo -android.server.search.SearchableInfo$1 +android.server.search.Searchables +android.speech.IRecognitionListener$Stub android.speech.IRecognitionService$Stub +android.speech.RecognitionResult +android.speech.RecognitionServiceUtil +android.speech.srec.MicrophoneInputStream android.speech.srec.Recognizer android.speech.tts.ITts$Stub android.speech.tts.ITts$Stub$Proxy android.speech.tts.TextToSpeech -android.telephony.CellLocation android.telephony.PhoneNumberUtils -android.telephony.PhoneStateListener android.telephony.PhoneStateListener$1 -android.telephony.PhoneStateListener$2 android.telephony.ServiceState -android.telephony.ServiceState$1 android.telephony.SignalStrength +android.telephony.SmsMessage android.telephony.TelephonyManager -android.telephony.gsm.GsmCellLocation android.text.AndroidCharacter android.text.Annotation android.text.AutoText android.text.BoringLayout -android.text.BoringLayout$Metrics android.text.DynamicLayout -android.text.DynamicLayout$ChangeWatcher -android.text.Editable -android.text.Editable$Factory -android.text.GetChars -android.text.GraphicsOperations +android.text.Html android.text.Html$HtmlParser +android.text.HtmlToSpannedConverter android.text.IClipboard$Stub -android.text.InputFilter -android.text.InputType android.text.Layout -android.text.Layout$Alignment -android.text.Layout$Directions -android.text.Layout$Ellipsizer -android.text.NoCopySpan -android.text.NoCopySpan$Concrete -android.text.PackedIntVector -android.text.PackedObjectVector -android.text.ParcelableSpan android.text.Selection -android.text.Selection$END -android.text.Selection$START -android.text.SpanWatcher -android.text.Spannable -android.text.Spannable$Factory -android.text.SpannableString android.text.SpannableStringBuilder -android.text.SpannableStringInternal -android.text.Spanned android.text.SpannedString android.text.StaticLayout -android.text.Styled -android.text.TextPaint android.text.TextUtils -android.text.TextUtils$1 -android.text.TextUtils$EllipsizeCallback -android.text.TextUtils$SimpleStringSplitter -android.text.TextUtils$StringSplitter -android.text.TextUtils$TruncateAt -android.text.TextWatcher -android.text.format.DateFormat android.text.format.DateUtils android.text.format.Formatter android.text.format.Time android.text.method.ArrowKeyMovementMethod android.text.method.BaseKeyListener -android.text.method.KeyListener +android.text.method.DialerKeyListener +android.text.method.DigitsKeyListener +android.text.method.LinkMovementMethod android.text.method.MetaKeyKeyListener -android.text.method.MovementMethod -android.text.method.NumberKeyListener -android.text.method.PasswordTransformationMethod -android.text.method.PasswordTransformationMethod$PasswordCharSequence -android.text.method.PasswordTransformationMethod$ViewReference -android.text.method.PasswordTransformationMethod$Visible android.text.method.QwertyKeyListener -android.text.method.QwertyKeyListener$Replaced -android.text.method.ReplacementTransformationMethod -android.text.method.ReplacementTransformationMethod$ReplacementCharSequence android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence android.text.method.SingleLineTransformationMethod android.text.method.TextKeyListener -android.text.method.TextKeyListener$Capitalize -android.text.method.TextKeyListener$SettingsObserver -android.text.method.Touch -android.text.method.Touch$DragState -android.text.method.TransformationMethod -android.text.style.AlignmentSpan -android.text.style.CharacterStyle -android.text.style.ClickableSpan -android.text.style.ForegroundColorSpan -android.text.style.LeadingMarginSpan -android.text.style.LineBackgroundSpan -android.text.style.LineHeightSpan +android.text.style.BulletSpan +android.text.style.ImageSpan android.text.style.MetricAffectingSpan -android.text.style.ParagraphStyle -android.text.style.ReplacementSpan android.text.style.StyleSpan +android.text.style.TextAppearanceSpan android.text.style.URLSpan -android.text.style.UnderlineSpan -android.text.style.UpdateAppearance -android.text.style.UpdateLayout -android.text.style.WrapTogetherSpan android.text.util.Linkify -android.text.util.Linkify$1 -android.text.util.Linkify$2 -android.text.util.Linkify$3 -android.text.util.Linkify$4 -android.text.util.Linkify$MatchFilter -android.text.util.Linkify$TransformFilter android.text.util.Regex android.text.util.Rfc822Validator -android.util.AndroidException -android.util.AndroidRuntimeException android.util.AttributeSet android.util.DisplayMetrics android.util.EventLog android.util.EventLog$Event android.util.EventLog$List -android.util.FinitePool android.util.FloatMath android.util.Log android.util.LongSparseArray -android.util.Pool -android.util.Poolable -android.util.PoolableManager -android.util.Pools -android.util.Printer android.util.SparseArray -android.util.SparseBooleanArray -android.util.SparseIntArray android.util.StateSet -android.util.SynchronizedPool android.util.TypedValue android.util.Xml +android.util.Xml$Encoding android.view.AbsSavedState -android.view.AbsSavedState$1 -android.view.AbsSavedState$2 -android.view.ContextMenu -android.view.ContextMenu$ContextMenuInfo android.view.ContextThemeWrapper android.view.Display -android.view.Display$CompatibleDisplay android.view.FocusFinder -android.view.FocusFinder$1 android.view.GestureDetector -android.view.GestureDetector$GestureHandler -android.view.GestureDetector$OnDoubleTapListener -android.view.GestureDetector$OnGestureListener android.view.GestureDetector$SimpleOnGestureListener -android.view.Gravity -android.view.IRotationWatcher android.view.IRotationWatcher$Stub -android.view.IWindow -android.view.IWindow$Stub -android.view.IWindowManager android.view.IWindowManager$Stub android.view.IWindowManager$Stub$Proxy -android.view.IWindowSession android.view.IWindowSession$Stub -android.view.IWindowSession$Stub$Proxy android.view.KeyCharacterMap android.view.KeyCharacterMap$KeyData android.view.KeyEvent -android.view.KeyEvent$1 -android.view.KeyEvent$Callback android.view.LayoutInflater -android.view.LayoutInflater$Factory -android.view.LayoutInflater$Filter -android.view.Menu -android.view.MenuInflater android.view.MenuInflater$MenuState -android.view.MenuItem android.view.MotionEvent -android.view.MotionEvent$1 android.view.Surface android.view.Surface$1 -android.view.Surface$CompatibleCanvas -android.view.SurfaceHolder -android.view.SurfaceHolder$Callback android.view.SurfaceSession android.view.SurfaceView -android.view.SurfaceView$1 -android.view.SurfaceView$2 -android.view.SurfaceView$MyWindow -android.view.TouchDelegate android.view.VelocityTracker -android.view.VelocityTracker$1 android.view.View -android.view.View$AttachInfo android.view.View$AttachInfo$Callbacks +android.view.View$AttachInfo$InvalidateInfo android.view.View$BaseSavedState -android.view.View$BaseSavedState$1 -android.view.View$CheckForLongPress -android.view.View$MeasureSpec -android.view.View$OnClickListener -android.view.View$OnCreateContextMenuListener -android.view.View$OnFocusChangeListener -android.view.View$OnKeyListener -android.view.View$OnLongClickListener -android.view.View$OnTouchListener -android.view.View$ScrollabilityCache -android.view.View$UnsetPressedState -android.view.ViewConfiguration android.view.ViewGroup -android.view.ViewGroup$LayoutParams -android.view.ViewGroup$MarginLayoutParams -android.view.ViewGroup$OnHierarchyChangeListener -android.view.ViewManager android.view.ViewParent android.view.ViewRoot -android.view.ViewRoot$1 -android.view.ViewRoot$InputMethodCallback -android.view.ViewRoot$RunQueue -android.view.ViewRoot$RunQueue$HandlerAction -android.view.ViewRoot$TrackballAxis -android.view.ViewRoot$W -android.view.ViewTreeObserver -android.view.ViewTreeObserver$InternalInsetsInfo -android.view.ViewTreeObserver$OnGlobalFocusChangeListener -android.view.ViewTreeObserver$OnGlobalLayoutListener -android.view.ViewTreeObserver$OnPreDrawListener -android.view.ViewTreeObserver$OnScrollChangedListener -android.view.ViewTreeObserver$OnTouchModeChangeListener +android.view.ViewStub android.view.Window -android.view.Window$Callback -android.view.Window$LocalWindowManager -android.view.WindowLeaked -android.view.WindowManager android.view.WindowManager$LayoutParams -android.view.WindowManager$LayoutParams$1 android.view.WindowManagerImpl android.view.accessibility.AccessibilityEvent android.view.accessibility.AccessibilityEvent$1 -android.view.accessibility.AccessibilityEventSource -android.view.accessibility.AccessibilityManager -android.view.accessibility.AccessibilityManager$1 -android.view.accessibility.AccessibilityManager$MyHandler -android.view.accessibility.IAccessibilityManager -android.view.accessibility.IAccessibilityManager$Stub -android.view.accessibility.IAccessibilityManager$Stub$Proxy -android.view.accessibility.IAccessibilityManagerClient -android.view.accessibility.IAccessibilityManagerClient$Stub -android.view.animation.AccelerateDecelerateInterpolator -android.view.animation.AccelerateInterpolator -android.view.animation.AlphaAnimation android.view.animation.Animation -android.view.animation.Animation$AnimationListener -android.view.animation.Animation$Description android.view.animation.AnimationSet -android.view.animation.AnimationUtils -android.view.animation.Interpolator -android.view.animation.LayoutAnimationController -android.view.animation.ScaleAnimation -android.view.animation.Transformation -android.view.animation.TranslateAnimation android.view.inputmethod.BaseInputConnection android.view.inputmethod.CompletionInfo -android.view.inputmethod.CompletionInfo$1 -android.view.inputmethod.ComposingText android.view.inputmethod.EditorInfo -android.view.inputmethod.EditorInfo$1 android.view.inputmethod.ExtractedText -android.view.inputmethod.ExtractedText$1 -android.view.inputmethod.ExtractedTextRequest -android.view.inputmethod.ExtractedTextRequest$1 -android.view.inputmethod.InputConnection -android.view.inputmethod.InputConnectionWrapper +android.view.inputmethod.InputMethodInfo android.view.inputmethod.InputMethodManager android.view.inputmethod.InputMethodManager$1 -android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper -android.view.inputmethod.InputMethodManager$H android.webkit.BrowserFrame -android.webkit.ByteArrayBuilder -android.webkit.ByteArrayBuilder$Chunk +android.webkit.CacheLoader android.webkit.CacheManager android.webkit.CallbackProxy +android.webkit.CallbackProxy$ResultTransport android.webkit.CookieManager android.webkit.CookieSyncManager android.webkit.DataLoader -android.webkit.FrameLoader -android.webkit.HttpAuthHandler +android.webkit.GearsPermissionsManager android.webkit.HttpDateTime android.webkit.JWebCoreJavaBridge android.webkit.LoadListener -android.webkit.LoadListener$1 android.webkit.MimeTypeMap -android.webkit.PerfChecker -android.webkit.SslErrorHandler -android.webkit.StreamLoader android.webkit.TextDialog android.webkit.URLUtil -android.webkit.WebBackForwardList -android.webkit.WebHistoryItem -android.webkit.WebIconDatabase -android.webkit.WebIconDatabase$EventHandler -android.webkit.WebIconDatabase$EventHandler$1 +android.webkit.WebIconDatabase$IconListener android.webkit.WebSettings -android.webkit.WebSettings$EventHandler -android.webkit.WebSettings$EventHandler$1 -android.webkit.WebSettings$LayoutAlgorithm -android.webkit.WebSettings$RenderPriority android.webkit.WebSettings$TextSize -android.webkit.WebSettings$ZoomDensity -android.webkit.WebSyncManager -android.webkit.WebSyncManager$SyncHandler android.webkit.WebView -android.webkit.WebView$1 -android.webkit.WebView$2 -android.webkit.WebView$FocusNode android.webkit.WebView$HitTestResult -android.webkit.WebView$PrivateHandler android.webkit.WebViewCore -android.webkit.WebViewCore$DrawData -android.webkit.WebViewCore$EventHub -android.webkit.WebViewCore$EventHub$1 -android.webkit.WebViewCore$FocusData -android.webkit.WebViewCore$WebCoreThread -android.webkit.WebViewCore$WebCoreThread$1 android.webkit.WebViewDatabase +android.webkit.gears.ApacheHttpRequestAndroid +android.webkit.gears.ApacheHttpRequestAndroid$Buffer +android.webkit.gears.NativeDialog android.widget.AbsListView -android.widget.AbsListView$1 -android.widget.AbsListView$2 android.widget.AbsListView$3 -android.widget.AbsListView$CheckForLongPress -android.widget.AbsListView$CheckForTap -android.widget.AbsListView$FlingRunnable -android.widget.AbsListView$LayoutParams -android.widget.AbsListView$OnScrollListener android.widget.AbsListView$PerformClick -android.widget.AbsListView$RecycleBin -android.widget.AbsListView$RecyclerListener android.widget.AbsListView$SavedState -android.widget.AbsListView$SavedState$1 -android.widget.AbsListView$WindowRunnnable android.widget.AbsSeekBar android.widget.AbsSpinner -android.widget.AbsSpinner$RecycleBin android.widget.AbsSpinner$SavedState -android.widget.AbsSpinner$SavedState$1 android.widget.AbsoluteLayout -android.widget.Adapter android.widget.AdapterView -android.widget.AdapterView$AdapterDataSetObserver -android.widget.AdapterView$OnItemClickListener -android.widget.AdapterView$OnItemLongClickListener -android.widget.AdapterView$OnItemSelectedListener android.widget.AnalogClock android.widget.AppSecurityPermissions +android.widget.AppSecurityPermissions$State android.widget.ArrayAdapter android.widget.AutoCompleteTextView -android.widget.AutoCompleteTextView$1 -android.widget.AutoCompleteTextView$2 -android.widget.AutoCompleteTextView$DropDownItemClickListener android.widget.AutoCompleteTextView$DropDownListView -android.widget.AutoCompleteTextView$ListSelectorHider -android.widget.AutoCompleteTextView$MyWatcher -android.widget.AutoCompleteTextView$PassThroughClickListener -android.widget.AutoCompleteTextView$PopupTouchIntercepter -android.widget.AutoCompleteTextView$Validator android.widget.BaseAdapter -android.widget.Button +android.widget.BaseExpandableListAdapter android.widget.CheckBox -android.widget.Checkable android.widget.CheckedTextView android.widget.Chronometer android.widget.CompoundButton -android.widget.CompoundButton$OnCheckedChangeListener android.widget.CompoundButton$SavedState -android.widget.CompoundButton$SavedState$1 android.widget.CursorAdapter -android.widget.CursorAdapter$ChangeObserver -android.widget.CursorAdapter$MyDataSetObserver -android.widget.CursorFilter -android.widget.CursorFilter$CursorFilterClient android.widget.CursorTreeAdapter android.widget.DatePicker android.widget.EditText android.widget.ExpandableListConnector +android.widget.ExpandableListConnector$GroupMetadata android.widget.ExpandableListView android.widget.FastScroller -android.widget.Filter -android.widget.Filter$FilterListener -android.widget.Filter$FilterResults -android.widget.Filter$RequestArguments -android.widget.Filter$RequestHandler -android.widget.Filter$ResultsHandler -android.widget.FilterQueryProvider -android.widget.Filterable android.widget.FrameLayout -android.widget.FrameLayout$LayoutParams android.widget.Gallery android.widget.GridView android.widget.HeaderViewListAdapter -android.widget.ImageButton android.widget.ImageView android.widget.ImageView$ScaleType android.widget.LinearLayout -android.widget.LinearLayout$LayoutParams -android.widget.ListAdapter android.widget.ListView -android.widget.ListView$ArrowScrollFocusResult -android.widget.ListView$FixedViewInfo android.widget.ListView$SavedState -android.widget.ListView$SavedState$1 android.widget.MediaController android.widget.MultiAutoCompleteTextView android.widget.PopupWindow -android.widget.PopupWindow$1 android.widget.PopupWindow$PopupViewContainer android.widget.ProgressBar android.widget.ProgressBar$SavedState -android.widget.ProgressBar$SavedState$1 +android.widget.RadioButton android.widget.RadioGroup android.widget.RatingBar android.widget.RelativeLayout -android.widget.RelativeLayout$DependencyGraph android.widget.RelativeLayout$DependencyGraph$Node -android.widget.RelativeLayout$DependencyGraph$Node$1 -android.widget.RelativeLayout$LayoutParams android.widget.RemoteViews -android.widget.RemoteViews$1 -android.widget.RemoteViews$Action -android.widget.RemoteViews$ReflectionAction -android.widget.RemoteViews$SetOnClickPendingIntent android.widget.ResourceCursorAdapter +android.widget.ResourceCursorTreeAdapter android.widget.ScrollBarDrawable android.widget.ScrollView -android.widget.Scroller android.widget.SeekBar -android.widget.SeekBar$OnSeekBarChangeListener +android.widget.SimpleAdapter android.widget.SimpleCursorAdapter +android.widget.SimpleCursorTreeAdapter android.widget.SlidingDrawer android.widget.Spinner -android.widget.SpinnerAdapter +android.widget.Spinner$DropDownAdapter android.widget.TabHost -android.widget.TabHost$1 -android.widget.TabHost$2 -android.widget.TabHost$ContentStrategy -android.widget.TabHost$IndicatorStrategy -android.widget.TabHost$IntentContentStrategy -android.widget.TabHost$LabelAndIconIndicatorStrategy -android.widget.TabHost$OnTabChangeListener -android.widget.TabHost$TabSpec -android.widget.TabHost$ViewIndicatorStrategy android.widget.TabWidget -android.widget.TabWidget$OnTabSelectionChanged -android.widget.TabWidget$TabClickListener android.widget.TableLayout -android.widget.TableLayout$LayoutParams -android.widget.TableLayout$PassThroughHierarchyChangeListener android.widget.TableRow -android.widget.TableRow$ChildrenTracker -android.widget.TableRow$LayoutParams android.widget.TextView -android.widget.TextView$2 -android.widget.TextView$3 -android.widget.TextView$Blink android.widget.TextView$BufferType -android.widget.TextView$ChangeWatcher -android.widget.TextView$CharWrapper -android.widget.TextView$Drawables -android.widget.TextView$InputContentType -android.widget.TextView$InputMethodState -android.widget.TextView$OnEditorActionListener +android.widget.TextView$CommitSelectionReceiver android.widget.TextView$SavedState -android.widget.TextView$SavedState$1 android.widget.TimePicker +android.widget.TimePicker$SavedState android.widget.Toast android.widget.Toast$TN -android.widget.Toast$TN$1 -android.widget.Toast$TN$2 +android.widget.TwoLineListItem android.widget.VideoView android.widget.ViewAnimator android.widget.ViewSwitcher -android.widget.WrapperListAdapter android.widget.ZoomButton -android.widget.ZoomButton$1 android.widget.ZoomButtonsController -android.widget.ZoomButtonsController$1 -android.widget.ZoomButtonsController$2 -android.widget.ZoomButtonsController$3 -android.widget.ZoomButtonsController$4 -android.widget.ZoomButtonsController$Container -android.widget.ZoomButtonsController$OnZoomListener android.widget.ZoomControls com.android.internal.R$drawable com.android.internal.R$styleable com.android.internal.app.AlertActivity com.android.internal.app.AlertController -com.android.internal.app.AlertController$1 com.android.internal.app.AlertController$AlertParams -com.android.internal.app.AlertController$AlertParams$3 -com.android.internal.app.AlertController$ButtonHandler +com.android.internal.app.AlertController$AlertParams$1 com.android.internal.app.AlertController$RecycleListView com.android.internal.app.ChooserActivity com.android.internal.app.ResolverActivity +com.android.internal.app.ResolverActivity$ResolveListAdapter com.android.internal.app.RingtonePickerActivity -com.android.internal.appwidget.IAppWidgetService +com.android.internal.appwidget.IAppWidgetHost$Stub com.android.internal.appwidget.IAppWidgetService$Stub -com.android.internal.appwidget.IAppWidgetService$Stub$Proxy +com.android.internal.database.ArrayListCursor com.android.internal.database.SortCursor +com.android.internal.database.SortCursor$1 com.android.internal.graphics.NativeUtils com.android.internal.location.DummyLocationProvider com.android.internal.location.GpsLocationProvider -com.android.internal.logging.AndroidConfig com.android.internal.logging.AndroidHandler -com.android.internal.logging.AndroidHandler$1 com.android.internal.os.AndroidPrintStream com.android.internal.os.BinderInternal com.android.internal.os.BinderInternal$GcWatcher com.android.internal.os.LoggingPrintStream -com.android.internal.os.LoggingPrintStream$1 com.android.internal.os.RuntimeInit com.android.internal.os.RuntimeInit$1 -com.android.internal.os.RuntimeInit$UncaughtHandler com.android.internal.os.ZygoteConnection com.android.internal.os.ZygoteConnection$Arguments com.android.internal.os.ZygoteInit -com.android.internal.os.ZygoteInit$MethodAndArgsCaller -com.android.internal.policy.IPolicy com.android.internal.policy.PolicyManager com.android.internal.policy.impl.PhoneLayoutInflater com.android.internal.policy.impl.PhoneWindow -com.android.internal.policy.impl.PhoneWindow$1 -com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback com.android.internal.policy.impl.PhoneWindow$DecorView -com.android.internal.policy.impl.PhoneWindow$DrawableFeatureState -com.android.internal.policy.impl.PhoneWindow$PanelFeatureState com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState -com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1 com.android.internal.policy.impl.PhoneWindowManager com.android.internal.policy.impl.Policy -com.android.internal.telephony.BaseCommands -com.android.internal.telephony.Connection$DisconnectCause com.android.internal.telephony.GsmAlphabet -com.android.internal.telephony.IPhoneStateListener com.android.internal.telephony.IPhoneStateListener$Stub -com.android.internal.telephony.IPhoneSubInfo com.android.internal.telephony.IPhoneSubInfo$Stub -com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy -com.android.internal.telephony.ITelephony com.android.internal.telephony.ITelephony$Stub com.android.internal.telephony.ITelephony$Stub$Proxy -com.android.internal.telephony.ITelephonyRegistry com.android.internal.telephony.ITelephonyRegistry$Stub -com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy -com.android.internal.telephony.IccCardApplication$PersoSubState -com.android.internal.telephony.IccProvider +com.android.internal.telephony.IccCard$State com.android.internal.telephony.Phone$State -com.android.internal.telephony.PhoneBase -com.android.internal.telephony.PhoneProxy com.android.internal.telephony.PhoneStateIntentReceiver -com.android.internal.telephony.RIL com.android.internal.telephony.SmsMessageBase -com.android.internal.telephony.gsm.GSMPhone -com.android.internal.telephony.gsm.GsmDataConnectionTracker -com.android.internal.telephony.gsm.GsmMmiCode -com.android.internal.telephony.gsm.MccTable +com.android.internal.telephony.gsm.GsmSmsAddress com.android.internal.telephony.gsm.SmsMessage -com.android.internal.telephony.gsm.stk.CommandDetails -com.android.internal.telephony.gsm.stk.ResultCode +com.android.internal.telephony.gsm.SmsMessage$SubmitPdu com.android.internal.util.ArrayUtils com.android.internal.util.FastXmlSerializer -com.android.internal.util.XmlUtils com.android.internal.view.IInputConnectionWrapper -com.android.internal.view.IInputConnectionWrapper$MyHandler -com.android.internal.view.IInputConnectionWrapper$SomeArgs -com.android.internal.view.IInputContext com.android.internal.view.IInputContext$Stub -com.android.internal.view.IInputContextCallback -com.android.internal.view.IInputContextCallback$Stub -com.android.internal.view.IInputContextCallback$Stub$Proxy -com.android.internal.view.IInputMethodCallback -com.android.internal.view.IInputMethodCallback$Stub -com.android.internal.view.IInputMethodClient -com.android.internal.view.IInputMethodClient$Stub -com.android.internal.view.IInputMethodManager +com.android.internal.view.IInputMethod$Stub com.android.internal.view.IInputMethodManager$Stub -com.android.internal.view.IInputMethodManager$Stub$Proxy -com.android.internal.view.IInputMethodSession -com.android.internal.view.IInputMethodSession$Stub -com.android.internal.view.IInputMethodSession$Stub$Proxy -com.android.internal.view.InputBindResult -com.android.internal.view.InputBindResult$1 +com.android.internal.view.InputConnectionWrapper$InputContextCallback com.android.internal.view.menu.ExpandedMenuView com.android.internal.view.menu.IconMenuItemView com.android.internal.view.menu.IconMenuView -com.android.internal.view.menu.IconMenuView$1 -com.android.internal.view.menu.IconMenuView$LayoutParams com.android.internal.view.menu.IconMenuView$SavedState -com.android.internal.view.menu.IconMenuView$SavedState$1 com.android.internal.view.menu.ListMenuItemView com.android.internal.view.menu.MenuBuilder -com.android.internal.view.menu.MenuBuilder$Callback -com.android.internal.view.menu.MenuBuilder$ItemInvoker -com.android.internal.view.menu.MenuBuilder$MenuAdapter -com.android.internal.view.menu.MenuBuilder$MenuType com.android.internal.view.menu.MenuItemImpl -com.android.internal.view.menu.MenuView -com.android.internal.view.menu.MenuView$ItemView com.android.internal.view.menu.SubMenuBuilder -com.android.internal.widget.DialogTitle -com.android.internal.widget.EditableInputConnection com.android.internal.widget.LockPatternUtils com.android.internal.widget.NumberPicker -com.google.android.collect.Lists -com.google.android.collect.Maps -com.google.android.collect.Sets +com.android.internal.widget.NumberPickerButton +com.android.internal.widget.Smileys com.google.android.gdata.client.AndroidGDataClient +com.google.android.gdata.client.AndroidXmlParserFactory com.google.android.gles_jni.EGLImpl com.google.android.gles_jni.GLImpl com.google.android.mms.pdu.PduPersister com.google.android.mms.util.PduCache com.google.android.net.GoogleHttpClient -com.google.android.net.GoogleHttpClient$WrappedLayeredSocketFactory -com.google.android.net.GoogleHttpClient$WrappedSocketFactory com.google.android.net.NetworkStatsEntity -com.google.android.net.SSLClientSessionCacheFactory com.google.android.net.UrlRules com.google.android.net.UrlRules$Rule -com.google.common.Clock com.google.common.Config -com.google.common.GenericClock -com.google.common.I18n com.google.common.Log -com.google.common.StaticUtil -com.google.common.android.AndroidClock com.google.common.android.AndroidConfig -com.google.common.android.AndroidConfig$1 -com.google.common.graphics.FontFactory -com.google.common.graphics.ImageFactory -com.google.common.graphics.InterpolatedFontFactory -com.google.common.graphics.android.AndroidFontFactory -com.google.common.graphics.android.AndroidImageFactory -com.google.common.io.BaseConnectionFactory +com.google.common.async.AsyncHttpRequestFactory$AsyncHttpRequestImpl +com.google.common.graphics.android.AndroidGraphics com.google.common.io.BaseHttpConnectionFactory -com.google.common.io.BasePersistentStore -com.google.common.io.BaseTcpConnectionFactory -com.google.common.io.ConnectionFactory -com.google.common.io.GoogleHttpConnection -com.google.common.io.Gunzipper -com.google.common.io.Gunzipper$GunzipInterface -com.google.common.io.HttpConnectionFactory -com.google.common.io.InMemoryPersistentStore -com.google.common.io.PersistentStore -com.google.common.io.PersistentStore$PersistentStoreException -com.google.common.io.PreferenceStore -com.google.common.io.TcpConnectionFactory -com.google.common.io.android.AndroidFixedPersistentStore +com.google.common.io.IoUtil com.google.common.io.android.AndroidHttpClient -com.google.common.io.android.AndroidHttpClient$1 -com.google.common.io.android.AndroidHttpClient$2 -com.google.common.io.android.AndroidHttpClient$CurlLogger -com.google.common.io.android.AndroidHttpClient$LoggingConfiguration com.google.common.io.android.AndroidHttpConnectionFactory -com.google.common.io.android.AndroidHttpConnectionFactory$1 -com.google.common.io.android.AndroidHttpConnectionFactory$AndroidGoogleHttpConnection com.google.common.io.android.AndroidPersistentStore -com.google.common.io.android.AndroidTcpConnectionFactory -com.google.common.io.android.CountingByteChannel$Counter -com.google.common.io.android.GoogleHttpClient -com.google.common.io.android.J2SeTcpConnectionFactory com.google.common.io.protocol.ProtoBuf com.google.common.io.protocol.ProtoBufType com.google.common.util.text.TextUtil -com.google.debug.DebugUtil +com.google.masf.BlockingByteQueue com.google.masf.MobileServiceMux +com.google.masf.protocol.PlainRequest +com.google.masf.services.EventLogService com.google.masf.services.LogserviceMessageTypes com.google.masf.services.resume.WindowResumeService com.google.wireless.gdata.calendar.client.CalendarClient +com.google.wireless.gdata.client.GDataServiceClient com.google.wireless.gdata.contacts.client.ContactsClient +com.google.wireless.gdata.contacts.parser.xml.XmlContactsGDataParserFactory com.ibm.icu4jni.charset.CharsetDecoderICU com.ibm.icu4jni.charset.CharsetEncoderICU com.ibm.icu4jni.charset.CharsetICU @@ -1339,23 +807,14 @@ com.ibm.icu4jni.charset.NativeConverter com.ibm.icu4jni.common.ErrorCode com.ibm.icu4jni.lang.UCharacter com.ibm.icu4jni.regex.NativeRegEx -com.ibm.icu4jni.text.CollationAttribute -com.ibm.icu4jni.text.Collator com.ibm.icu4jni.text.DecimalFormat -com.ibm.icu4jni.text.DecimalFormatSymbols -com.ibm.icu4jni.text.DecimalFormatSymbols$1 com.ibm.icu4jni.text.NativeBreakIterator com.ibm.icu4jni.text.NativeCollation com.ibm.icu4jni.text.NativeDecimalFormat com.ibm.icu4jni.text.NativeDecimalFormat$UNumberFormatAttribute com.ibm.icu4jni.text.NativeDecimalFormat$UNumberFormatSymbol -com.ibm.icu4jni.text.RuleBasedCollator com.ibm.icu4jni.text.RuleBasedNumberFormat com.ibm.icu4jni.util.Resources -com.ibm.icu4jni.util.Resources$ISO4Currencies -com.ibm.icu4jni.util.Resources$ISO4CurrenciesToDigits -com.ibm.icu4jni.util.Resources$Locale -dalvik.system.DexFile dalvik.system.NativeStart dalvik.system.PathClassLoader dalvik.system.TouchDex @@ -1364,53 +823,39 @@ dalvik.system.VMRuntime dalvik.system.VMStack dalvik.system.Zygote java.beans.PropertyChangeEvent -java.beans.PropertyChangeListener java.beans.PropertyChangeSupport java.io.BufferedInputStream -java.io.BufferedOutputStream java.io.BufferedReader -java.io.ByteArrayInputStream -java.io.ByteArrayOutputStream java.io.Closeable java.io.DataInput -java.io.DataInputStream java.io.DataOutput java.io.DataOutputStream -java.io.Externalizable +java.io.EmulatedFieldsForDumping +java.io.EmulatedFieldsForLoading java.io.File java.io.FileDescriptor java.io.FileInputStream java.io.FileInputStream$RepositioningLock -java.io.FileNotFoundException java.io.FileOutputStream -java.io.FilterInputStream java.io.FilterOutputStream java.io.Flushable -java.io.IOException java.io.InputStream java.io.InputStreamReader -java.io.InterruptedIOException java.io.ObjectInput java.io.ObjectInputStream java.io.ObjectOutput java.io.ObjectOutputStream java.io.ObjectStreamClass java.io.ObjectStreamConstants -java.io.ObjectStreamException java.io.ObjectStreamField -java.io.ObjectStreamField$1 java.io.OutputStream java.io.PrintStream java.io.PrintWriter +java.io.PushbackReader java.io.RandomAccessFile -java.io.RandomAccessFile$RepositionLock java.io.Reader java.io.Serializable -java.io.StreamCorruptedException -java.io.StringReader java.io.StringWriter -java.io.UnsupportedEncodingException -java.io.Writer java.lang.AbstractStringBuilder java.lang.Appendable java.lang.ArrayIndexOutOfBoundsException @@ -1423,23 +868,16 @@ java.lang.Character$valueOfCache java.lang.Class java.lang.ClassCache java.lang.ClassCache$EnumComparator -java.lang.ClassCastException java.lang.ClassLoader java.lang.ClassLoader$SystemClassLoader -java.lang.ClassNotFoundException -java.lang.CloneNotSupportedException java.lang.Cloneable java.lang.Comparable java.lang.Double java.lang.Enum java.lang.Error java.lang.Exception -java.lang.ExceptionInInitializerError java.lang.Float java.lang.IllegalArgumentException -java.lang.IllegalStateException -java.lang.IncompatibleClassChangeError -java.lang.IndexOutOfBoundsException java.lang.Integer java.lang.Integer$valueOfCache java.lang.InternalError @@ -1451,9 +889,6 @@ java.lang.Long java.lang.Long$valueOfCache java.lang.Math java.lang.NoClassDefFoundError -java.lang.NoSuchFieldException -java.lang.NoSuchMethodException -java.lang.NullPointerException java.lang.Number java.lang.NumberFormatException java.lang.Object @@ -1481,8 +916,6 @@ java.lang.Thread$UncaughtExceptionHandler java.lang.ThreadGroup java.lang.ThreadGroup$ChildrenGroupsLock java.lang.ThreadGroup$ChildrenThreadsLock -java.lang.ThreadLocal -java.lang.ThreadLocal$Values java.lang.Throwable java.lang.UnsatisfiedLinkError java.lang.UnsupportedOperationException @@ -1510,45 +943,26 @@ java.lang.reflect.ReflectionAccessImpl java.lang.reflect.Type java.math.BigDecimal java.math.BigInt -java.math.BigInt$Context java.math.BigInteger java.math.Multiplication -java.net.ContentHandler java.net.DatagramPacket java.net.HttpURLConnection java.net.Inet4Address -java.net.Inet6Address java.net.InetAddress -java.net.InetAddress$Cache -java.net.InetAddress$CacheElement java.net.InetAddress$WaitReachable java.net.InetSocketAddress java.net.JarURLConnection -java.net.NegativeCache -java.net.NetPermission java.net.NetworkInterface java.net.Proxy -java.net.Proxy$Type java.net.ProxySelector java.net.ProxySelectorImpl -java.net.ProxySelectorImpl$1 -java.net.ResponseCache java.net.ServerSocket java.net.Socket -java.net.Socket$ConnectLock -java.net.SocketAddress java.net.SocketImpl java.net.SocketOptions -java.net.SocketTimeoutException java.net.URI -java.net.URI$Helper -java.net.URIEncoderDecoder -java.net.URISyntaxException java.net.URL java.net.URLConnection -java.net.URLConnection$DefaultContentHandler -java.net.URLEncoder -java.net.URLStreamHandler java.nio.BaseByteBuffer java.nio.Buffer java.nio.BufferFactory @@ -1557,13 +971,18 @@ java.nio.ByteOrder java.nio.CharArrayBuffer java.nio.CharBuffer java.nio.CharSequenceAdapter +java.nio.CharToByteBufferAdapter java.nio.DirectByteBuffer +java.nio.FloatBuffer +java.nio.FloatToByteBufferAdapter java.nio.HeapByteBuffer java.nio.IntToByteBufferAdapter java.nio.NIOAccess java.nio.ReadWriteCharArrayBuffer java.nio.ReadWriteDirectByteBuffer java.nio.ReadWriteHeapByteBuffer +java.nio.ReadWriteIntArrayBuffer +java.nio.ShortToByteBufferAdapter java.nio.channels.ByteChannel java.nio.channels.Channel java.nio.channels.FileChannel @@ -1581,248 +1000,127 @@ java.nio.charset.CharsetEncoder java.nio.charset.CoderResult java.nio.charset.CodingErrorAction java.nio.charset.spi.CharsetProvider -java.security.AccessControlContext java.security.AccessController java.security.BasicPermission -java.security.GeneralSecurityException java.security.Guard -java.security.Key -java.security.KeyFactory -java.security.KeyFactorySpi java.security.KeyStore -java.security.KeyStore$1 -java.security.KeyStoreSpi java.security.MessageDigest -java.security.MessageDigestSpi java.security.Permission -java.security.Principal java.security.PrivilegedAction java.security.PrivilegedExceptionAction -java.security.ProtectionDomain java.security.Provider -java.security.Provider$Service -java.security.Provider$Service$1 -java.security.PublicKey java.security.SecureRandom -java.security.SecureRandomSpi java.security.Security -java.security.Security$1 -java.security.Security$SecurityDoor -java.security.cert.CertPath -java.security.cert.CertPathParameters -java.security.cert.CertPathValidator -java.security.cert.CertPathValidatorResult -java.security.cert.CertPathValidatorSpi -java.security.cert.CertSelector -java.security.cert.Certificate -java.security.cert.CertificateFactory -java.security.cert.CertificateFactorySpi -java.security.cert.PKIXCertPathValidatorResult +java.security.cert.CertificateParsingException java.security.cert.PKIXParameters -java.security.cert.PolicyNode -java.security.cert.TrustAnchor java.security.cert.X509CertSelector java.security.cert.X509Certificate -java.security.cert.X509Extension -java.security.interfaces.RSAKey -java.security.interfaces.RSAPublicKey -java.security.spec.EncodedKeySpec -java.security.spec.KeySpec -java.security.spec.X509EncodedKeySpec -java.text.AttributedCharacterIterator$Attribute java.text.Collator java.text.DateFormat java.text.DateFormat$Field -java.text.DateFormatSymbols java.text.DecimalFormat -java.text.DecimalFormat$2 java.text.DecimalFormatSymbols -java.text.FieldPosition java.text.Format -java.text.Format$1 -java.text.Format$Field java.text.NumberFormat -java.text.RuleBasedCollator java.text.SimpleDateFormat java.util.AbstractCollection java.util.AbstractList -java.util.AbstractList$FullListIterator -java.util.AbstractList$SimpleListIterator java.util.AbstractMap -java.util.AbstractQueue -java.util.AbstractSequentialList java.util.AbstractSet java.util.ArrayList java.util.Arrays -java.util.Arrays$ArrayList +java.util.BitSet java.util.Calendar java.util.Collection java.util.Collections java.util.Collections$EmptyList java.util.Collections$EmptyMap java.util.Collections$EmptySet -java.util.Collections$SynchronizedCollection -java.util.Collections$SynchronizedSet +java.util.Collections$SynchronizedList +java.util.Collections$SynchronizedRandomAccessList java.util.Collections$UnmodifiableCollection java.util.Collections$UnmodifiableCollection$1 java.util.Collections$UnmodifiableList -java.util.Collections$UnmodifiableMap -java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet -java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1 java.util.Collections$UnmodifiableRandomAccessList java.util.Collections$UnmodifiableSet -java.util.ComparableTimSort java.util.Comparator -java.util.Currency java.util.Date java.util.Dictionary java.util.EnumMap java.util.EnumSet java.util.Enumeration -java.util.EventListener -java.util.EventObject -java.util.Formattable java.util.Formatter -java.util.Formatter$FloatUtil -java.util.Formatter$FormatToken -java.util.Formatter$ParserStateMachine -java.util.Formatter$Transformer java.util.GregorianCalendar java.util.HashMap java.util.HashMap$1 java.util.HashMap$1$1 -java.util.HashMap$2 -java.util.HashMap$2$1 java.util.HashMap$Entry -java.util.HashMap$HashMapEntrySet -java.util.HashMap$HashMapEntrySet$1 java.util.HashMap$HashMapIterator java.util.HashSet java.util.Hashtable java.util.Hashtable$1 -java.util.Hashtable$2 -java.util.Hashtable$2$1 -java.util.Hashtable$4 -java.util.Hashtable$4$1 java.util.Hashtable$Entry -java.util.Hashtable$HashEnumerator -java.util.Hashtable$HashIterator java.util.IdentityHashMap java.util.Iterator -java.util.LinkedHashMap -java.util.LinkedHashMap$1 -java.util.LinkedHashMap$1$1 -java.util.LinkedHashMap$LinkedHashIterator -java.util.LinkedHashMap$LinkedHashMapEntry -java.util.LinkedHashMap$LinkedHashMapEntrySet -java.util.LinkedHashMap$LinkedHashMapEntrySet$1 java.util.LinkedList -java.util.LinkedList$Link -java.util.LinkedList$LinkIterator java.util.List -java.util.ListIterator -java.util.ListResourceBundle java.util.Locale -java.util.Locale$1 java.util.Map java.util.Map$Entry java.util.MapEntry java.util.MapEntry$Type -java.util.Observable -java.util.Observer java.util.PriorityQueue java.util.Properties java.util.PropertyPermission -java.util.PropertyResourceBundle -java.util.Queue -java.util.Random java.util.RandomAccess java.util.ResourceBundle -java.util.ResourceBundle$1 -java.util.ResourceBundle$MissingBundle java.util.Scanner java.util.Set java.util.SimpleTimeZone java.util.SortedMap java.util.SortedSet +java.util.SpecialAccess java.util.Stack java.util.StringTokenizer -java.util.TimSort java.util.TimeZone java.util.Timer java.util.TreeMap -java.util.TreeMap$2 -java.util.TreeMap$AbstractMapIterator -java.util.TreeMap$Entry -java.util.TreeMap$UnboundedKeyIterator java.util.TreeSet java.util.Vector +java.util.Vector$1 java.util.WeakHashMap -java.util.WeakHashMap$1 -java.util.WeakHashMap$1$1 -java.util.WeakHashMap$2 -java.util.WeakHashMap$2$1 java.util.WeakHashMap$Entry -java.util.WeakHashMap$Entry$Type -java.util.WeakHashMap$HashIterator java.util.concurrent.AbstractExecutorService -java.util.concurrent.BlockingQueue -java.util.concurrent.Callable +java.util.concurrent.ArrayBlockingQueue java.util.concurrent.ConcurrentHashMap +java.util.concurrent.ConcurrentHashMap$Segment java.util.concurrent.CopyOnWriteArrayList -java.util.concurrent.CopyOnWriteArrayList$ListIteratorImpl -java.util.concurrent.Executor -java.util.concurrent.ExecutorService -java.util.concurrent.Executors -java.util.concurrent.Executors$DefaultThreadFactory -java.util.concurrent.Future -java.util.concurrent.FutureTask -java.util.concurrent.FutureTask$Sync +java.util.concurrent.DelayQueue +java.util.concurrent.Executors$DelegatedExecutorService +java.util.concurrent.Executors$DelegatedScheduledExecutorService java.util.concurrent.LinkedBlockingQueue -java.util.concurrent.LinkedBlockingQueue$Node -java.util.concurrent.RejectedExecutionHandler java.util.concurrent.ScheduledThreadPoolExecutor +java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue +java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask +java.util.concurrent.Semaphore java.util.concurrent.SynchronousQueue -java.util.concurrent.ThreadFactory +java.util.concurrent.SynchronousQueue$Node java.util.concurrent.ThreadPoolExecutor -java.util.concurrent.ThreadPoolExecutor$AbortPolicy -java.util.concurrent.ThreadPoolExecutor$Worker java.util.concurrent.TimeUnit java.util.concurrent.atomic.AtomicInteger java.util.concurrent.atomic.AtomicLong +java.util.concurrent.atomic.AtomicReference java.util.concurrent.atomic.UnsafeAccess java.util.concurrent.locks.AbstractQueuedSynchronizer -java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject -java.util.concurrent.locks.AbstractQueuedSynchronizer$Node -java.util.concurrent.locks.Condition -java.util.concurrent.locks.Lock -java.util.concurrent.locks.LockSupport java.util.concurrent.locks.ReentrantLock -java.util.concurrent.locks.ReentrantLock$FairSync -java.util.concurrent.locks.ReentrantLock$NonfairSync java.util.concurrent.locks.ReentrantLock$Sync -java.util.concurrent.locks.UnsafeAccess -java.util.jar.Attributes java.util.jar.Attributes$Name -java.util.jar.InitManifest -java.util.jar.JarEntry java.util.jar.JarFile -java.util.jar.JarFile$1JarFileEnumerator -java.util.jar.JarFile$JarFileInputStream -java.util.jar.JarVerifier java.util.jar.Manifest -java.util.logging.ErrorManager -java.util.logging.Formatter -java.util.logging.Handler java.util.logging.Level java.util.logging.LogManager -java.util.logging.LogManager$1 -java.util.logging.LogManager$2 -java.util.logging.LogManager$2$1 -java.util.logging.LogManager$3 java.util.logging.LogRecord java.util.logging.Logger -java.util.logging.LoggingPermission java.util.regex.MatchResult java.util.regex.Matcher java.util.regex.Pattern @@ -1831,102 +1129,47 @@ java.util.zip.CRC32 java.util.zip.Checksum java.util.zip.Deflater java.util.zip.DeflaterOutputStream -java.util.zip.GZIPInputStream -java.util.zip.GZIPOutputStream java.util.zip.Inflater -java.util.zip.InflaterInputStream -java.util.zip.ZipConstants -java.util.zip.ZipEntry -java.util.zip.ZipEntry$LittleEndianReader java.util.zip.ZipFile -java.util.zip.ZipFile$2 -java.util.zip.ZipFile$RAFStream +javax.crypto.Cipher +javax.crypto.spec.SecretKeySpec javax.microedition.khronos.egl.EGL javax.microedition.khronos.egl.EGL10 +javax.microedition.khronos.egl.EGLContext javax.microedition.khronos.opengles.GL javax.microedition.khronos.opengles.GL10 javax.microedition.khronos.opengles.GL10Ext javax.microedition.khronos.opengles.GL11 javax.microedition.khronos.opengles.GL11Ext javax.microedition.khronos.opengles.GL11ExtensionPack -javax.net.SocketFactory javax.net.ssl.DefaultHostnameVerifier -javax.net.ssl.HostnameVerifier javax.net.ssl.HttpsURLConnection -javax.net.ssl.KeyManager -javax.net.ssl.KeyManagerFactory -javax.net.ssl.KeyManagerFactory$1 -javax.net.ssl.KeyManagerFactorySpi -javax.net.ssl.SSLContextSpi +javax.net.ssl.SSLContext +javax.net.ssl.SSLHandshakeException javax.net.ssl.SSLServerSocket javax.net.ssl.SSLSession -javax.net.ssl.SSLSessionContext javax.net.ssl.SSLSocket -javax.net.ssl.SSLSocketFactory -javax.net.ssl.SSLSocketFactory$1 -javax.net.ssl.TrustManager -javax.net.ssl.TrustManagerFactory -javax.net.ssl.TrustManagerFactory$1 -javax.net.ssl.TrustManagerFactorySpi -javax.net.ssl.X509ExtendedKeyManager -javax.net.ssl.X509KeyManager -javax.net.ssl.X509TrustManager -javax.security.auth.x500.X500Principal -javax.security.cert.Certificate javax.security.cert.X509Certificate -javax.security.cert.X509Certificate$1 -javax.security.cert.X509Certificate$2 -javax.xml.parsers.DocumentBuilder -javax.xml.parsers.DocumentBuilderFactory junit.framework.Assert -org.apache.commons.codec.BinaryDecoder -org.apache.commons.codec.BinaryEncoder -org.apache.commons.codec.Decoder -org.apache.commons.codec.Encoder org.apache.commons.codec.binary.Base64 org.apache.commons.codec.binary.Hex -org.apache.commons.logging.Log org.apache.commons.logging.LogFactory org.apache.commons.logging.impl.Jdk14Logger -org.apache.commons.logging.impl.WeakHashtable -org.apache.harmony.archive.util.Util org.apache.harmony.dalvik.NativeTestTarget -org.apache.harmony.dalvik.ddmc.Chunk org.apache.harmony.dalvik.ddmc.ChunkHandler org.apache.harmony.dalvik.ddmc.DdmServer org.apache.harmony.kernel.vm.LangAccess org.apache.harmony.kernel.vm.ReflectionAccess org.apache.harmony.lang.annotation.AnnotationFactory org.apache.harmony.lang.annotation.AnnotationMember -org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection -org.apache.harmony.luni.internal.net.www.protocol.file.Handler -org.apache.harmony.luni.internal.net.www.protocol.http.Handler -org.apache.harmony.luni.internal.net.www.protocol.http.Header -org.apache.harmony.luni.internal.net.www.protocol.http.HttpConfiguration -org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection -org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager -org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager$ConnectionPool +org.apache.harmony.lang.annotation.AnnotationMember$DefaultValues org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection -org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$1 -org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$LimitedInputStream org.apache.harmony.luni.internal.net.www.protocol.https.Handler org.apache.harmony.luni.internal.net.www.protocol.jar.Handler org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection -org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$1 -org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$CacheEntry -org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$JarURLConnectionInputStream -org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$LRUComparator -org.apache.harmony.luni.internal.util.TimezoneGetter -org.apache.harmony.luni.internal.util.ZoneInfo org.apache.harmony.luni.internal.util.ZoneInfoDB org.apache.harmony.luni.net.GenericIPMreq -org.apache.harmony.luni.net.NetUtil -org.apache.harmony.luni.net.NetUtil$Action org.apache.harmony.luni.net.PlainSocketImpl -org.apache.harmony.luni.net.PlainSocketImpl2 -org.apache.harmony.luni.net.SocketImplProvider -org.apache.harmony.luni.net.SocketInputStream -org.apache.harmony.luni.net.SocketOutputStream org.apache.harmony.luni.platform.AdapterManager org.apache.harmony.luni.platform.Endianness org.apache.harmony.luni.platform.IAdaptable @@ -1944,19 +1187,9 @@ org.apache.harmony.luni.platform.OSNetworkSystem org.apache.harmony.luni.platform.Platform org.apache.harmony.luni.platform.PlatformAddress org.apache.harmony.luni.platform.PlatformAddressFactory -org.apache.harmony.luni.util.Base64 org.apache.harmony.luni.util.FloatingPointParser -org.apache.harmony.luni.util.FloatingPointParser$StringExponentPair -org.apache.harmony.luni.util.Inet6Util -org.apache.harmony.luni.util.MsgHelp -org.apache.harmony.luni.util.MsgHelp$1 org.apache.harmony.luni.util.NumberConverter org.apache.harmony.luni.util.PriviAction -org.apache.harmony.luni.util.TwoKeyHashMap -org.apache.harmony.luni.util.TwoKeyHashMap$Entry -org.apache.harmony.luni.util.TwoKeyHashMap$EntryIteratorImpl -org.apache.harmony.luni.util.TwoKeyHashMap$ValueIteratorImpl -org.apache.harmony.luni.util.TwoKeyHashMap$ValuesCollectionImpl org.apache.harmony.luni.util.Util org.apache.harmony.nio.AddressUtil org.apache.harmony.nio.FileChannelFactory @@ -1966,508 +1199,160 @@ org.apache.harmony.nio.internal.FileChannelImpl$RepositioningLock org.apache.harmony.nio.internal.LockManager org.apache.harmony.nio.internal.LockManager$1 org.apache.harmony.nio.internal.WriteOnlyFileChannel -org.apache.harmony.security.asn1.ASN1Any -org.apache.harmony.security.asn1.ASN1BitString -org.apache.harmony.security.asn1.ASN1BitString$ASN1NamedBitList -org.apache.harmony.security.asn1.ASN1Boolean -org.apache.harmony.security.asn1.ASN1Choice -org.apache.harmony.security.asn1.ASN1Constants -org.apache.harmony.security.asn1.ASN1Constructured -org.apache.harmony.security.asn1.ASN1Explicit org.apache.harmony.security.asn1.ASN1GeneralizedTime -org.apache.harmony.security.asn1.ASN1Implicit org.apache.harmony.security.asn1.ASN1Integer -org.apache.harmony.security.asn1.ASN1OctetString org.apache.harmony.security.asn1.ASN1Oid -org.apache.harmony.security.asn1.ASN1Oid$1 -org.apache.harmony.security.asn1.ASN1Primitive org.apache.harmony.security.asn1.ASN1Sequence -org.apache.harmony.security.asn1.ASN1SequenceOf -org.apache.harmony.security.asn1.ASN1SetOf org.apache.harmony.security.asn1.ASN1StringType -org.apache.harmony.security.asn1.ASN1StringType$1 -org.apache.harmony.security.asn1.ASN1StringType$2 -org.apache.harmony.security.asn1.ASN1StringType$3 -org.apache.harmony.security.asn1.ASN1StringType$4 -org.apache.harmony.security.asn1.ASN1StringType$5 -org.apache.harmony.security.asn1.ASN1StringType$6 -org.apache.harmony.security.asn1.ASN1StringType$7 -org.apache.harmony.security.asn1.ASN1Time -org.apache.harmony.security.asn1.ASN1Type -org.apache.harmony.security.asn1.ASN1TypeCollection -org.apache.harmony.security.asn1.ASN1UTCTime -org.apache.harmony.security.asn1.ASN1ValueCollection -org.apache.harmony.security.asn1.BerInputStream -org.apache.harmony.security.asn1.BerOutputStream -org.apache.harmony.security.asn1.BitString org.apache.harmony.security.asn1.DerInputStream org.apache.harmony.security.asn1.DerOutputStream -org.apache.harmony.security.asn1.ObjectIdentifier -org.apache.harmony.security.fortress.Engine -org.apache.harmony.security.fortress.SecurityAccess -org.apache.harmony.security.fortress.SecurityUtils org.apache.harmony.security.fortress.Services -org.apache.harmony.security.fortress.Services$1 -org.apache.harmony.security.internal.nls.Messages org.apache.harmony.security.pkcs7.ContentInfo -org.apache.harmony.security.pkcs7.ContentInfo$1 -org.apache.harmony.security.provider.cert.Cache org.apache.harmony.security.provider.cert.DRLCertFactory -org.apache.harmony.security.provider.cert.DRLCertFactory$1 org.apache.harmony.security.provider.cert.X509CertFactoryImpl org.apache.harmony.security.provider.cert.X509CertImpl org.apache.harmony.security.provider.cert.X509CertPathImpl -org.apache.harmony.security.provider.cert.X509CertPathImpl$1 -org.apache.harmony.security.provider.cert.X509CertPathImpl$2 -org.apache.harmony.security.provider.cert.X509CertPathImpl$3 -org.apache.harmony.security.provider.crypto.CryptoProvider -org.apache.harmony.security.provider.crypto.CryptoProvider$1 org.apache.harmony.security.provider.crypto.RandomBitsSupplier -org.apache.harmony.security.provider.crypto.RandomBitsSupplier$1 -org.apache.harmony.security.provider.crypto.SHA1Impl org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl -org.apache.harmony.security.provider.crypto.SHA1_Data +org.apache.harmony.security.provider.crypto.SHA1_MessageDigestImpl org.apache.harmony.security.utils.AlgNameMapper -org.apache.harmony.security.utils.ObjectIdentifier org.apache.harmony.security.x501.AttributeTypeAndValue -org.apache.harmony.security.x501.AttributeTypeAndValue$1 -org.apache.harmony.security.x501.AttributeTypeAndValue$2 -org.apache.harmony.security.x501.AttributeTypeAndValueComparator -org.apache.harmony.security.x501.AttributeValue org.apache.harmony.security.x501.DirectoryString -org.apache.harmony.security.x501.DirectoryString$1 org.apache.harmony.security.x501.Name -org.apache.harmony.security.x501.Name$1 org.apache.harmony.security.x509.AlgorithmIdentifier -org.apache.harmony.security.x509.AlgorithmIdentifier$1 org.apache.harmony.security.x509.BasicConstraints -org.apache.harmony.security.x509.BasicConstraints$1 org.apache.harmony.security.x509.Certificate -org.apache.harmony.security.x509.Certificate$1 -org.apache.harmony.security.x509.DNParser org.apache.harmony.security.x509.EDIPartyName -org.apache.harmony.security.x509.EDIPartyName$1 org.apache.harmony.security.x509.Extension -org.apache.harmony.security.x509.Extension$1 -org.apache.harmony.security.x509.Extension$2 -org.apache.harmony.security.x509.ExtensionValue org.apache.harmony.security.x509.Extensions -org.apache.harmony.security.x509.Extensions$1 org.apache.harmony.security.x509.GeneralName -org.apache.harmony.security.x509.GeneralName$1 org.apache.harmony.security.x509.GeneralNames -org.apache.harmony.security.x509.GeneralNames$1 org.apache.harmony.security.x509.KeyUsage org.apache.harmony.security.x509.ORAddress -org.apache.harmony.security.x509.ORAddress$1 -org.apache.harmony.security.x509.ORAddress$2 org.apache.harmony.security.x509.OtherName -org.apache.harmony.security.x509.OtherName$1 +org.apache.harmony.security.x509.PolicyQualifierInfo org.apache.harmony.security.x509.SubjectPublicKeyInfo -org.apache.harmony.security.x509.SubjectPublicKeyInfo$1 org.apache.harmony.security.x509.TBSCertificate -org.apache.harmony.security.x509.TBSCertificate$1 org.apache.harmony.security.x509.Time -org.apache.harmony.security.x509.Time$1 -org.apache.harmony.security.x509.Utils org.apache.harmony.security.x509.Validity -org.apache.harmony.security.x509.Validity$1 org.apache.harmony.text.BidiWrapper org.apache.harmony.xml.ExpatAttributes org.apache.harmony.xml.ExpatParser -org.apache.harmony.xml.ExpatParser$ClonedAttributes -org.apache.harmony.xml.ExpatParser$CurrentAttributes -org.apache.harmony.xml.ExpatParser$ExpatLocator org.apache.harmony.xml.ExpatPullParser org.apache.harmony.xml.ExpatPullParser$ByteDocument -org.apache.harmony.xml.ExpatPullParser$Document -org.apache.harmony.xml.ExpatPullParser$Document$SaxHandler -org.apache.harmony.xml.ExpatPullParser$EndTagEvent -org.apache.harmony.xml.ExpatPullParser$Event -org.apache.harmony.xml.ExpatPullParser$NamespaceStack -org.apache.harmony.xml.ExpatPullParser$NamespaceStack$Builder -org.apache.harmony.xml.ExpatPullParser$StartDocumentEvent -org.apache.harmony.xml.ExpatPullParser$StartTagEvent -org.apache.harmony.xml.ExpatPullParser$TextEvent org.apache.harmony.xml.ExpatReader -org.apache.harmony.xml.dom.DOMImplementationImpl +org.apache.harmony.xml.dom.AttrImpl +org.apache.harmony.xml.dom.CharacterDataImpl +org.apache.harmony.xml.dom.CommentImpl org.apache.harmony.xml.dom.DocumentImpl +org.apache.harmony.xml.dom.ElementImpl +org.apache.harmony.xml.dom.InnerNodeImpl +org.apache.harmony.xml.dom.NodeImpl +org.apache.harmony.xml.dom.TextImpl org.apache.harmony.xml.parsers.DocumentBuilderFactoryImpl org.apache.harmony.xml.parsers.DocumentBuilderImpl +org.apache.harmony.xml.parsers.SAXParserFactoryImpl org.apache.harmony.xnet.provider.jsse.AbstractSessionContext -org.apache.harmony.xnet.provider.jsse.ClientSessionContext -org.apache.harmony.xnet.provider.jsse.ClientSessionContext$1 -org.apache.harmony.xnet.provider.jsse.ClientSessionContext$HostAndPort org.apache.harmony.xnet.provider.jsse.FileClientSessionCache -org.apache.harmony.xnet.provider.jsse.FileClientSessionCache$Impl -org.apache.harmony.xnet.provider.jsse.JSSEProvider -org.apache.harmony.xnet.provider.jsse.JSSEProvider$1 -org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl -org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl$1 -org.apache.harmony.xnet.provider.jsse.KeyManagerImpl org.apache.harmony.xnet.provider.jsse.NativeCrypto -org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigest org.apache.harmony.xnet.provider.jsse.OpenSSLServerSocketImpl org.apache.harmony.xnet.provider.jsse.OpenSSLSessionImpl org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$Finalizer org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$LoggerHolder -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream -org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream org.apache.harmony.xnet.provider.jsse.ProtocolVersion -org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache org.apache.harmony.xnet.provider.jsse.SSLContextImpl org.apache.harmony.xnet.provider.jsse.SSLParameters org.apache.harmony.xnet.provider.jsse.ServerSessionContext -org.apache.harmony.xnet.provider.jsse.ServerSessionContext$1 -org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl -org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$1 -org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$2 -org.apache.harmony.xnet.provider.jsse.TrustManagerImpl -org.apache.http.ConnectionReuseStrategy -org.apache.http.FormattedHeader -org.apache.http.Header -org.apache.http.HeaderElement -org.apache.http.HeaderElementIterator -org.apache.http.HeaderIterator -org.apache.http.HttpClientConnection -org.apache.http.HttpConnection -org.apache.http.HttpConnectionMetrics -org.apache.http.HttpEntity -org.apache.http.HttpEntityEnclosingRequest -org.apache.http.HttpException -org.apache.http.HttpHost -org.apache.http.HttpInetConnection -org.apache.http.HttpMessage -org.apache.http.HttpRequest -org.apache.http.HttpRequestInterceptor -org.apache.http.HttpResponse -org.apache.http.HttpResponseFactory -org.apache.http.HttpResponseInterceptor org.apache.http.HttpVersion -org.apache.http.NameValuePair +org.apache.http.NoHttpResponseException org.apache.http.ProtocolException -org.apache.http.ProtocolVersion -org.apache.http.ReasonPhraseCatalog -org.apache.http.RequestLine -org.apache.http.StatusLine -org.apache.http.TokenIterator -org.apache.http.auth.AuthSchemeFactory -org.apache.http.auth.AuthSchemeRegistry -org.apache.http.auth.AuthState -org.apache.http.client.AuthenticationHandler -org.apache.http.client.ClientProtocolException -org.apache.http.client.CookieStore -org.apache.http.client.CredentialsProvider org.apache.http.client.HttpClient -org.apache.http.client.HttpRequestRetryHandler -org.apache.http.client.RedirectHandler -org.apache.http.client.RequestDirector -org.apache.http.client.ResponseHandler -org.apache.http.client.UserTokenHandler -org.apache.http.client.methods.AbortableHttpRequest org.apache.http.client.methods.HttpEntityEnclosingRequestBase org.apache.http.client.methods.HttpGet org.apache.http.client.methods.HttpPost org.apache.http.client.methods.HttpRequestBase -org.apache.http.client.methods.HttpUriRequest -org.apache.http.client.params.HttpClientParams -org.apache.http.client.protocol.RequestAddCookies -org.apache.http.client.protocol.RequestDefaultHeaders -org.apache.http.client.protocol.RequestProxyAuthentication -org.apache.http.client.protocol.RequestTargetAuthentication -org.apache.http.client.protocol.ResponseProcessCookies -org.apache.http.client.utils.URIUtils org.apache.http.conn.BasicManagedEntity -org.apache.http.conn.ClientConnectionManager -org.apache.http.conn.ClientConnectionOperator -org.apache.http.conn.ClientConnectionRequest -org.apache.http.conn.ConnectionKeepAliveStrategy -org.apache.http.conn.ConnectionReleaseTrigger -org.apache.http.conn.EofSensorInputStream -org.apache.http.conn.EofSensorWatcher -org.apache.http.conn.ManagedClientConnection -org.apache.http.conn.OperatedClientConnection -org.apache.http.conn.params.ConnManagerPNames org.apache.http.conn.params.ConnManagerParams -org.apache.http.conn.params.ConnManagerParams$1 -org.apache.http.conn.params.ConnPerRoute -org.apache.http.conn.params.ConnPerRouteBean -org.apache.http.conn.params.ConnRoutePNames org.apache.http.conn.params.ConnRouteParams -org.apache.http.conn.routing.BasicRouteDirector org.apache.http.conn.routing.HttpRoute -org.apache.http.conn.routing.HttpRouteDirector -org.apache.http.conn.routing.HttpRoutePlanner -org.apache.http.conn.routing.RouteInfo -org.apache.http.conn.routing.RouteInfo$LayerType -org.apache.http.conn.routing.RouteInfo$TunnelType -org.apache.http.conn.routing.RouteTracker -org.apache.http.conn.scheme.LayeredSocketFactory org.apache.http.conn.scheme.PlainSocketFactory -org.apache.http.conn.scheme.Scheme -org.apache.http.conn.scheme.SchemeRegistry -org.apache.http.conn.scheme.SocketFactory org.apache.http.conn.ssl.AbstractVerifier -org.apache.http.conn.ssl.AllowAllHostnameVerifier -org.apache.http.conn.ssl.BrowserCompatHostnameVerifier org.apache.http.conn.ssl.SSLSocketFactory -org.apache.http.conn.ssl.StrictHostnameVerifier -org.apache.http.conn.ssl.X509HostnameVerifier -org.apache.http.cookie.ClientCookie -org.apache.http.cookie.Cookie -org.apache.http.cookie.CookieAttributeHandler -org.apache.http.cookie.CookieIdentityComparator -org.apache.http.cookie.CookieOrigin -org.apache.http.cookie.CookiePathComparator -org.apache.http.cookie.CookieSpec -org.apache.http.cookie.CookieSpecFactory -org.apache.http.cookie.CookieSpecRegistry -org.apache.http.cookie.SetCookie -org.apache.http.entity.AbstractHttpEntity +org.apache.http.conn.util.InetAddressUtils org.apache.http.entity.BasicHttpEntity -org.apache.http.entity.ByteArrayEntity -org.apache.http.entity.ContentLengthStrategy -org.apache.http.entity.HttpEntityWrapper +org.apache.http.entity.InputStreamEntity org.apache.http.entity.StringEntity org.apache.http.impl.AbstractHttpClientConnection -org.apache.http.impl.DefaultConnectionReuseStrategy -org.apache.http.impl.DefaultHttpResponseFactory org.apache.http.impl.EnglishReasonPhraseCatalog org.apache.http.impl.HttpConnectionMetricsImpl org.apache.http.impl.SocketHttpClientConnection -org.apache.http.impl.auth.BasicSchemeFactory -org.apache.http.impl.auth.DigestSchemeFactory org.apache.http.impl.client.AbstractAuthenticationHandler org.apache.http.impl.client.AbstractHttpClient -org.apache.http.impl.client.BasicCookieStore -org.apache.http.impl.client.BasicCredentialsProvider -org.apache.http.impl.client.ClientParamsStack -org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy org.apache.http.impl.client.DefaultHttpClient -org.apache.http.impl.client.DefaultHttpRequestRetryHandler -org.apache.http.impl.client.DefaultProxyAuthenticationHandler -org.apache.http.impl.client.DefaultRedirectHandler -org.apache.http.impl.client.DefaultRequestDirector -org.apache.http.impl.client.DefaultTargetAuthenticationHandler -org.apache.http.impl.client.DefaultUserTokenHandler org.apache.http.impl.client.EntityEnclosingRequestWrapper -org.apache.http.impl.client.RequestWrapper -org.apache.http.impl.client.RoutedRequest org.apache.http.impl.conn.AbstractClientConnAdapter -org.apache.http.impl.conn.AbstractPoolEntry org.apache.http.impl.conn.AbstractPooledConnAdapter org.apache.http.impl.conn.DefaultClientConnection -org.apache.http.impl.conn.DefaultClientConnectionOperator -org.apache.http.impl.conn.DefaultHttpRoutePlanner -org.apache.http.impl.conn.DefaultResponseParser -org.apache.http.impl.conn.IdleConnectionHandler -org.apache.http.impl.conn.IdleConnectionHandler$TimeValues org.apache.http.impl.conn.SingleClientConnManager -org.apache.http.impl.conn.SingleClientConnManager$1 -org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter -org.apache.http.impl.conn.SingleClientConnManager$PoolEntry -org.apache.http.impl.conn.tsccm.AbstractConnPool -org.apache.http.impl.conn.tsccm.BasicPoolEntry -org.apache.http.impl.conn.tsccm.BasicPoolEntryRef -org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter org.apache.http.impl.conn.tsccm.ConnPoolByRoute -org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1 -org.apache.http.impl.conn.tsccm.PoolEntryRequest -org.apache.http.impl.conn.tsccm.RefQueueHandler -org.apache.http.impl.conn.tsccm.RefQueueWorker -org.apache.http.impl.conn.tsccm.RouteSpecificPool org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager -org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1 -org.apache.http.impl.conn.tsccm.WaitingThreadAborter -org.apache.http.impl.cookie.AbstractCookieAttributeHandler -org.apache.http.impl.cookie.AbstractCookieSpec org.apache.http.impl.cookie.BasicClientCookie -org.apache.http.impl.cookie.BasicCommentHandler -org.apache.http.impl.cookie.BasicDomainHandler -org.apache.http.impl.cookie.BasicExpiresHandler -org.apache.http.impl.cookie.BasicMaxAgeHandler -org.apache.http.impl.cookie.BasicPathHandler -org.apache.http.impl.cookie.BasicSecureHandler -org.apache.http.impl.cookie.BestMatchSpec -org.apache.http.impl.cookie.BestMatchSpecFactory org.apache.http.impl.cookie.BrowserCompatSpec -org.apache.http.impl.cookie.BrowserCompatSpecFactory -org.apache.http.impl.cookie.CookieSpecBase org.apache.http.impl.cookie.DateUtils -org.apache.http.impl.cookie.NetscapeDraftSpecFactory -org.apache.http.impl.cookie.RFC2109DomainHandler org.apache.http.impl.cookie.RFC2109Spec -org.apache.http.impl.cookie.RFC2109SpecFactory -org.apache.http.impl.cookie.RFC2109VersionHandler -org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler -org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler -org.apache.http.impl.cookie.RFC2965DomainAttributeHandler -org.apache.http.impl.cookie.RFC2965PortAttributeHandler org.apache.http.impl.cookie.RFC2965Spec -org.apache.http.impl.cookie.RFC2965SpecFactory -org.apache.http.impl.cookie.RFC2965VersionAttributeHandler -org.apache.http.impl.entity.EntityDeserializer -org.apache.http.impl.entity.EntitySerializer -org.apache.http.impl.entity.LaxContentLengthStrategy -org.apache.http.impl.entity.StrictContentLengthStrategy -org.apache.http.impl.io.AbstractMessageParser -org.apache.http.impl.io.AbstractMessageWriter org.apache.http.impl.io.AbstractSessionInputBuffer -org.apache.http.impl.io.AbstractSessionOutputBuffer -org.apache.http.impl.io.ChunkedInputStream -org.apache.http.impl.io.ContentLengthInputStream -org.apache.http.impl.io.ContentLengthOutputStream -org.apache.http.impl.io.HttpRequestWriter -org.apache.http.impl.io.HttpTransportMetricsImpl org.apache.http.impl.io.SocketInputBuffer -org.apache.http.impl.io.SocketOutputBuffer -org.apache.http.io.HttpMessageParser -org.apache.http.io.HttpMessageWriter -org.apache.http.io.HttpTransportMetrics -org.apache.http.io.SessionInputBuffer -org.apache.http.io.SessionOutputBuffer org.apache.http.message.AbstractHttpMessage -org.apache.http.message.BasicHeader org.apache.http.message.BasicHeaderElement -org.apache.http.message.BasicHeaderElementIterator -org.apache.http.message.BasicHeaderValueParser +org.apache.http.message.BasicHttpEntityEnclosingRequest +org.apache.http.message.BasicHttpRequest org.apache.http.message.BasicHttpResponse org.apache.http.message.BasicLineFormatter org.apache.http.message.BasicLineParser -org.apache.http.message.BasicListHeaderIterator -org.apache.http.message.BasicNameValuePair -org.apache.http.message.BasicRequestLine -org.apache.http.message.BasicStatusLine org.apache.http.message.BasicTokenIterator -org.apache.http.message.BufferedHeader -org.apache.http.message.HeaderGroup -org.apache.http.message.HeaderValueParser -org.apache.http.message.LineFormatter -org.apache.http.message.LineParser -org.apache.http.message.ParserCursor org.apache.http.params.AbstractHttpParams org.apache.http.params.BasicHttpParams -org.apache.http.params.CoreConnectionPNames -org.apache.http.params.CoreProtocolPNames -org.apache.http.params.HttpConnectionParams -org.apache.http.params.HttpParams -org.apache.http.params.HttpProtocolParams -org.apache.http.protocol.BasicHttpContext org.apache.http.protocol.BasicHttpProcessor org.apache.http.protocol.HTTP -org.apache.http.protocol.HttpContext -org.apache.http.protocol.HttpProcessor -org.apache.http.protocol.HttpRequestExecutor -org.apache.http.protocol.HttpRequestInterceptorList -org.apache.http.protocol.HttpResponseInterceptorList -org.apache.http.protocol.RequestConnControl -org.apache.http.protocol.RequestContent -org.apache.http.protocol.RequestExpectContinue -org.apache.http.protocol.RequestTargetHost -org.apache.http.protocol.RequestUserAgent -org.apache.http.util.ByteArrayBuffer -org.apache.http.util.CharArrayBuffer -org.apache.http.util.EntityUtils -org.apache.http.util.LangUtils -org.apache.http.util.VersionInfo -org.bouncycastle.asn1.ASN1Choice -org.bouncycastle.asn1.ASN1Collection -org.bouncycastle.asn1.ASN1Collection$ASN1CollectionEnumeration -org.bouncycastle.asn1.ASN1Encodable -org.bouncycastle.asn1.ASN1EncodableVector -org.bouncycastle.asn1.ASN1InputStream -org.bouncycastle.asn1.ASN1InputStream$1 -org.bouncycastle.asn1.ASN1Null -org.bouncycastle.asn1.ASN1OctetString -org.bouncycastle.asn1.ASN1OutputStream -org.bouncycastle.asn1.ASN1Sequence -org.bouncycastle.asn1.ASN1Set -org.bouncycastle.asn1.ASN1TaggedObject -org.bouncycastle.asn1.DERBitString -org.bouncycastle.asn1.DERBoolean -org.bouncycastle.asn1.DEREncodable -org.bouncycastle.asn1.DEREncodableVector -org.bouncycastle.asn1.DERIA5String -org.bouncycastle.asn1.DERInteger org.bouncycastle.asn1.DERNull org.bouncycastle.asn1.DERObject org.bouncycastle.asn1.DERObjectIdentifier -org.bouncycastle.asn1.DEROctetString -org.bouncycastle.asn1.DEROutputStream -org.bouncycastle.asn1.DERPrintableString -org.bouncycastle.asn1.DERSequence -org.bouncycastle.asn1.DERSet -org.bouncycastle.asn1.DERString -org.bouncycastle.asn1.DERTaggedObject -org.bouncycastle.asn1.DERTags -org.bouncycastle.asn1.DERUTCTime -org.bouncycastle.asn1.DERUTF8String -org.bouncycastle.asn1.OIDTokenizer -org.bouncycastle.asn1.OrderedTable org.bouncycastle.asn1.iana.IANAObjectIdentifiers org.bouncycastle.asn1.nist.NISTObjectIdentifiers org.bouncycastle.asn1.oiw.OIWObjectIdentifiers org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers -org.bouncycastle.asn1.x509.AlgorithmIdentifier -org.bouncycastle.asn1.x509.BasicConstraints -org.bouncycastle.asn1.x509.RSAPublicKeyStructure -org.bouncycastle.asn1.x509.SubjectPublicKeyInfo -org.bouncycastle.asn1.x509.TBSCertificateStructure -org.bouncycastle.asn1.x509.Time -org.bouncycastle.asn1.x509.X509CertificateStructure -org.bouncycastle.asn1.x509.X509Extension org.bouncycastle.asn1.x509.X509Extensions org.bouncycastle.asn1.x509.X509Name -org.bouncycastle.asn1.x509.X509NameElementList -org.bouncycastle.asn1.x509.X509ObjectIdentifiers -org.bouncycastle.crypto.CipherParameters -org.bouncycastle.crypto.Digest -org.bouncycastle.crypto.ExtendedDigest -org.bouncycastle.crypto.Mac -org.bouncycastle.crypto.PBEParametersGenerator +org.bouncycastle.crypto.digests.SHA1Digest org.bouncycastle.crypto.engines.AESFastEngine org.bouncycastle.crypto.generators.PKCS12ParametersGenerator -org.bouncycastle.crypto.io.MacInputStream org.bouncycastle.crypto.macs.HMac -org.bouncycastle.crypto.params.KeyParameter -org.bouncycastle.jce.interfaces.BCKeyStore -org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier org.bouncycastle.jce.provider.BouncyCastleProvider org.bouncycastle.jce.provider.CertPathValidatorUtilities +org.bouncycastle.jce.provider.JCEBlockCipher org.bouncycastle.jce.provider.JCEBlockCipher$AES -org.bouncycastle.jce.provider.JCERSAPublicKey +org.bouncycastle.jce.provider.JCEMac org.bouncycastle.jce.provider.JDKKeyFactory org.bouncycastle.jce.provider.JDKKeyFactory$RSA org.bouncycastle.jce.provider.JDKKeyStore -org.bouncycastle.jce.provider.JDKKeyStore$StoreEntry org.bouncycastle.jce.provider.JDKX509CertificateFactory org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi -org.bouncycastle.jce.provider.PKIXPolicyNode -org.bouncycastle.jce.provider.RSAUtil +org.bouncycastle.jce.provider.WrapCipherSpi org.bouncycastle.jce.provider.X509CertificateObject -org.bouncycastle.util.Strings +org.ccil.cowan.tagsoup.AttributesImpl org.ccil.cowan.tagsoup.HTMLScanner +org.ccil.cowan.tagsoup.HTMLSchema org.ccil.cowan.tagsoup.Parser -org.json.JSONArray org.json.JSONObject -org.json.JSONObject$Null -org.json.JSONTokener org.kxml2.io.KXmlParser org.kxml2.io.KXmlSerializer org.openssl.NativeBN -org.w3c.dom.DOMImplementation org.xml.sax.Attributes -org.xml.sax.ContentHandler -org.xml.sax.DTDHandler -org.xml.sax.EntityResolver -org.xml.sax.ErrorHandler -org.xml.sax.InputSource -org.xml.sax.Locator -org.xml.sax.XMLReader org.xml.sax.helpers.DefaultHandler org.xmlpull.v1.XmlPullParser -org.xmlpull.v1.XmlPullParserFactory -org.xmlpull.v1.XmlSerializer +org.xmlpull.v1.XmlPullParserException +org.xmlpull.v1.sax2.Driver sun.misc.Unsafe diff --git a/tools/preload/20090811.compiled b/tools/preload/20090811.compiled Binary files differindex dd61487..6dbeca0 100644 --- a/tools/preload/20090811.compiled +++ b/tools/preload/20090811.compiled diff --git a/tools/preload/Android.mk b/tools/preload/Android.mk index e6fa103..f325870 100644 --- a/tools/preload/Android.mk +++ b/tools/preload/Android.mk @@ -3,13 +3,13 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ - ClassRank.java \ Compile.java \ LoadedClass.java \ MemoryUsage.java \ Operation.java \ Policy.java \ PrintCsv.java \ + PrintHtmlDiff.java \ PrintPsTree.java \ Proc.java \ Record.java \ diff --git a/tools/preload/ClassRank.java b/tools/preload/ClassRank.java deleted file mode 100644 index c562d5c..0000000 --- a/tools/preload/ClassRank.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.util.Comparator; - -/** - * Ranks classes for preloading based on how long their operations took - * and how early the operations happened. Higher ranked classes come first. - */ -class ClassRank implements Comparator<Operation> { - - /** - * Increase this number to add more weight to classes which were loaded - * earlier. - */ - static final int SEQUENCE_WEIGHT = 500; // 0.5ms - - static final int BUCKET_SIZE = 5; - - public int compare(Operation a, Operation b) { - // Higher ranked operations should come first. - int result = rankOf(b) - rankOf(a); - if (result != 0) { - return result; - } - - // Make sure we don't drop one of two classes w/ the same rank. - // If a load and an initialization have the same rank, it's OK - // to treat the operations equally. - return a.loadedClass.name.compareTo(b.loadedClass.name); - } - - /** Ranks the given operation. */ - private static int rankOf(Operation o) { - return o.medianExclusiveTimeMicros() - + SEQUENCE_WEIGHT / (o.index / BUCKET_SIZE + 1); - } -} - - diff --git a/tools/preload/LoadedClass.java b/tools/preload/LoadedClass.java index 9ef17f5..86e5dfc 100644 --- a/tools/preload/LoadedClass.java +++ b/tools/preload/LoadedClass.java @@ -51,7 +51,7 @@ class LoadedClass implements Serializable, Comparable<LoadedClass> { } void measureMemoryUsage() { -// this.memoryUsage = MemoryUsage.forClass(name); + this.memoryUsage = MemoryUsage.forClass(name); } int mlt = -1; @@ -76,6 +76,10 @@ class LoadedClass implements Serializable, Comparable<LoadedClass> { return mit = calculateMedian(initializations); } + int medianTimeMicros() { + return medianInitTimeMicros() + medianLoadTimeMicros(); + } + /** Calculates the median duration for a list of operations. */ private static int calculateMedian(List<Operation> operations) { int size = operations.size(); @@ -99,18 +103,18 @@ class LoadedClass implements Serializable, Comparable<LoadedClass> { } } - /** Returns names of apps that loaded this class. */ - Set<String> applicationNames() { - Set<String> appNames = new HashSet<String>(); - addProcessNames(loads, appNames); - addProcessNames(initializations, appNames); - return appNames; + /** Returns names of processes that loaded this class. */ + Set<String> processNames() { + Set<String> names = new HashSet<String>(); + addProcessNames(loads, names); + addProcessNames(initializations, names); + return names; } - private void addProcessNames(List<Operation> ops, Set<String> appNames) { + private void addProcessNames(List<Operation> ops, Set<String> names) { for (Operation operation : ops) { - if (operation.process.isApplication()) { - appNames.add(operation.process.name); + if (operation.process.fromZygote()) { + names.add(operation.process.name); } } } @@ -123,31 +127,4 @@ class LoadedClass implements Serializable, Comparable<LoadedClass> { public String toString() { return name; } - - /** - * Returns true if this class's initialization causes the given class to - * initialize. - */ - public boolean initializes(LoadedClass clazz, Set<LoadedClass> visited) { - // Avoid infinite recursion. - if (!visited.add(this)) { - return false; - } - - if (clazz == this) { - return true; - } - - for (Operation initialization : initializations) { - if (initialization.loadedClass.initializes(clazz, visited)) { - return true; - } - } - - return false; - } - - public boolean isPreloadable() { - return systemClass && Policy.isPreloadableClass(name); - } } diff --git a/tools/preload/MemoryUsage.java b/tools/preload/MemoryUsage.java index e5dfb2a..bc21b6f 100644 --- a/tools/preload/MemoryUsage.java +++ b/tools/preload/MemoryUsage.java @@ -34,8 +34,8 @@ class MemoryUsage implements Serializable { static final MemoryUsage NOT_AVAILABLE = new MemoryUsage(); static int errorCount = 0; - static final int MAXIMUM_ERRORS = 10; // give up after this many fails + // These values are in 1kB increments (not 4kB like you'd expect). final int nativeSharedPages; final int javaSharedPages; final int otherSharedPages; @@ -123,15 +123,24 @@ class MemoryUsage implements Serializable { return allocSize - freedSize; } + int totalHeap() { + return javaHeapSize() + (int) nativeHeapSize; + } + int javaPagesInK() { - return (javaSharedPages + javaPrivatePages) * 4; + return javaSharedPages + javaPrivatePages; } int nativePagesInK() { - return (nativeSharedPages + nativePrivatePages) * 4; + return nativeSharedPages + nativePrivatePages; } int otherPagesInK() { - return (otherSharedPages + otherPrivatePages) * 4; + return otherSharedPages + otherPrivatePages; + } + + int totalPages() { + return javaSharedPages + javaPrivatePages + nativeSharedPages + + nativePrivatePages + otherSharedPages + otherPrivatePages; } /** @@ -163,13 +172,6 @@ class MemoryUsage implements Serializable { * Measures memory usage for the given class. */ static MemoryUsage forClass(String className) { - - // This is a coarse approximation for determining that no device is connected, - // or that the communication protocol has changed, but we'll keep going and stop whining. - if (errorCount >= MAXIMUM_ERRORS) { - return NOT_AVAILABLE; - } - MeasureWithTimeout measurer = new MeasureWithTimeout(className); new Thread(measurer).start(); @@ -280,4 +282,17 @@ class MemoryUsage implements Serializable { e.printStackTrace(); } } + + /** Measures memory usage information and stores it in the model. */ + public static void main(String[] args) throws IOException, + ClassNotFoundException { + Root root = Root.fromFile(args[0]); + root.baseline = baseline(); + for (LoadedClass loadedClass : root.loadedClasses.values()) { + if (loadedClass.systemClass) { + loadedClass.measureMemoryUsage(); + } + } + root.toFile(args[0]); + } } diff --git a/tools/preload/Policy.java b/tools/preload/Policy.java index ade889e3..7a190ac 100644 --- a/tools/preload/Policy.java +++ b/tools/preload/Policy.java @@ -19,10 +19,10 @@ import java.util.HashSet; import java.util.Set; /** - * This is not instantiated - we just provide data for other classes to use + * Policy that governs which classes are preloaded. */ public class Policy { - + /** * No constructor - use static methods only */ @@ -31,18 +31,24 @@ public class Policy { /** * This location (in the build system) of the preloaded-classes file. */ - private static final String PRELOADED_CLASS_FILE + static final String PRELOADED_CLASS_FILE = "frameworks/base/preloaded-classes"; /** * Long running services. These are restricted in their contribution to the * preloader because their launch time is less critical. */ + // TODO: Generate this automatically from package manager. private static final Set<String> SERVICES = new HashSet<String>(Arrays.asList( - "system_server", - "com.google.process.content", - "android.process.media", - "com.google.process.gapps" + "system_server", + "com.google.process.content", + "android.process.media", + "com.android.phone", + "com.google.android.apps.maps.FriendService", + "com.google.android.apps.maps.LocationFriendService", + "com.google.android.googleapps", + "com.google.process.gapps", + "android.tts" )); /** @@ -63,24 +69,15 @@ public class Policy { )); /** - * Returns the path/file name of the preloaded classes file that will be written - * by WritePreloadedClassFile. - */ - public static String getPreloadedClassFileName() { - return PRELOADED_CLASS_FILE; - } - - /** - * Reports if the given process name is a "long running" process or service + * Returns true if the given process name is a "long running" process or + * service. */ public static boolean isService(String processName) { return SERVICES.contains(processName); } - - /** - * Reports if the given class should never be preloaded - */ - public static boolean isPreloadableClass(String className) { - return !EXCLUDED_CLASSES.contains(className); + + /**Reports if the given class should be preloaded. */ + public static boolean isPreloadable(LoadedClass clazz) { + return clazz.systemClass && !EXCLUDED_CLASSES.contains(clazz.name); } } diff --git a/tools/preload/PrintCsv.java b/tools/preload/PrintCsv.java index 62f4271..1820830 100644 --- a/tools/preload/PrintCsv.java +++ b/tools/preload/PrintCsv.java @@ -18,9 +18,12 @@ import java.io.IOException; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.BufferedInputStream; +import java.io.Writer; +import java.io.PrintStream; import java.util.Set; import java.util.HashSet; import java.util.TreeSet; +import java.util.Iterator; /** * Prints raw information in CSV format. @@ -36,71 +39,89 @@ public class PrintCsv { Root root = Root.fromFile(args[0]); - System.out.println("Name" + printHeaders(System.out); + + MemoryUsage baseline = MemoryUsage.baseline(); + + for (LoadedClass loadedClass : root.loadedClasses.values()) { + if (!loadedClass.systemClass) { + continue; + } + + printRow(System.out, baseline, loadedClass); + } + } + + static void printHeaders(PrintStream out) { + out.println("Name" + ",Preloaded" + ",Median Load Time (us)" + ",Median Init Time (us)" + ",Process Names" + ",Load Count" - + ",Init Count"); -// + ",Managed Heap (B)" -// + ",Native Heap (B)" -// + ",Managed Pages (kB)" -// + ",Native Pages (kB)" -// + ",Other Pages (kB)"); + + ",Init Count" + + ",Managed Heap (B)" + + ",Native Heap (B)" + + ",Managed Pages (kB)" + + ",Native Pages (kB)" + + ",Other Pages (kB)"); + } - MemoryUsage baseline = root.baseline; + static void printRow(PrintStream out, MemoryUsage baseline, + LoadedClass loadedClass) { + out.print(loadedClass.name); + out.print(','); + out.print(loadedClass.preloaded); + out.print(','); + out.print(loadedClass.medianLoadTimeMicros()); + out.print(','); + out.print(loadedClass.medianInitTimeMicros()); + out.print(','); + out.print('"'); - for (LoadedClass loadedClass : root.loadedClasses.values()) { - if (!loadedClass.systemClass) { - continue; - } + Set<String> procNames = new TreeSet<String>(); + for (Operation op : loadedClass.loads) + procNames.add(op.process.name); + for (Operation op : loadedClass.initializations) + procNames.add(op.process.name); - System.out.print(loadedClass.name); - System.out.print(','); - System.out.print(loadedClass.preloaded); - System.out.print(','); - System.out.print(loadedClass.medianLoadTimeMicros()); - System.out.print(','); - System.out.print(loadedClass.medianInitTimeMicros()); - System.out.print(','); - System.out.print('"'); - - Set<String> procNames = new TreeSet<String>(); - for (Operation op : loadedClass.loads) - procNames.add(op.process.name); - for (Operation op : loadedClass.initializations) - procNames.add(op.process.name); + if (procNames.size() <= 3) { for (String name : procNames) { - System.out.print(name + "\n"); + out.print(name + "\n"); } - - System.out.print('"'); - System.out.print(','); - System.out.print(loadedClass.loads.size()); - System.out.print(','); - System.out.print(loadedClass.initializations.size()); -/* - if (loadedClass.memoryUsage.isAvailable()) { - MemoryUsage subtracted - = loadedClass.memoryUsage.subtract(baseline); - - System.out.print(','); - System.out.print(subtracted.javaHeapSize()); - System.out.print(','); - System.out.print(subtracted.nativeHeapSize); - System.out.print(','); - System.out.print(subtracted.javaPagesInK()); - System.out.print(','); - System.out.print(subtracted.nativePagesInK()); - System.out.print(','); - System.out.print(subtracted.otherPagesInK()); - - } else { - System.out.print(",n/a,n/a,n/a,n/a,n/a"); - } -*/ - System.out.println(); + } else { + Iterator<String> i = procNames.iterator(); + out.print(i.next() + "\n"); + out.print(i.next() + "\n"); + out.print("...and " + (procNames.size() - 2) + + " others."); } + + out.print('"'); + out.print(','); + out.print(loadedClass.loads.size()); + out.print(','); + out.print(loadedClass.initializations.size()); + + if (loadedClass.memoryUsage.isAvailable()) { + MemoryUsage subtracted + = loadedClass.memoryUsage.subtract(baseline); + + out.print(','); + out.print(subtracted.javaHeapSize()); + out.print(','); + out.print(subtracted.nativeHeapSize); + out.print(','); + out.print(subtracted.javaPagesInK()); + out.print(','); + out.print(subtracted.nativePagesInK()); + out.print(','); + out.print(subtracted.otherPagesInK()); + + } else { + out.print(",n/a,n/a,n/a,n/a,n/a"); + } + + out.println(); } } diff --git a/tools/preload/PrintHtmlDiff.java b/tools/preload/PrintHtmlDiff.java new file mode 100644 index 0000000..b101c85 --- /dev/null +++ b/tools/preload/PrintHtmlDiff.java @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.FileReader; +import java.io.BufferedReader; +import java.io.PrintStream; +import java.util.Set; +import java.util.TreeSet; +import java.util.HashSet; +import java.util.Iterator; + +/** + * Prints HTML containing removed and added files. + */ +public class PrintHtmlDiff { + + private static final String OLD_PRELOADED_CLASSES + = "old-preloaded-classes"; + + public static void main(String[] args) throws IOException, + ClassNotFoundException { + Root root = Root.fromFile(args[0]); + + BufferedReader oldClasses = new BufferedReader( + new FileReader(OLD_PRELOADED_CLASSES)); + + // Classes loaded implicitly by the zygote. + Set<LoadedClass> zygote = new HashSet<LoadedClass>(); + for (Proc proc : root.processes.values()) { + if (proc.name.equals("zygote")) { + for (Operation op : proc.operations) { + zygote.add(op.loadedClass); + } + break; + } + } + + Set<LoadedClass> removed = new TreeSet<LoadedClass>(); + Set<LoadedClass> added = new TreeSet<LoadedClass>(); + + for (LoadedClass loadedClass : root.loadedClasses.values()) { + if (loadedClass.preloaded && !zygote.contains(loadedClass)) { + added.add(loadedClass); + } + } + + String line; + while ((line = oldClasses.readLine()) != null) { + line = line.trim(); + LoadedClass clazz = root.loadedClasses.get(line); + if (clazz != null) { + added.remove(clazz); + if (!clazz.preloaded) removed.add(clazz); + } + } + + PrintStream out = System.out; + + out.println("<html><body>"); + out.println("<style>"); + out.println("a, th, td, h2 { font-family: arial }"); + out.println("th, td { font-size: small }"); + out.println("</style>"); + out.println("<script src=\"sorttable.js\"></script>"); + out.println("<p><a href=\"#removed\">Removed</a>"); + out.println("<a name=\"added\"/><h2>Added</h2>"); + printTable(out, root.baseline, added); + out.println("<a name=\"removed\"/><h2>Removed</h2>"); + printTable(out, root.baseline, removed); + out.println("</body></html>"); + } + + static void printTable(PrintStream out, MemoryUsage baseline, + Iterable<LoadedClass> classes) { + out.println("<table border=\"1\" cellpadding=\"5\"" + + " class=\"sortable\">"); + + out.println("<thead><tr>"); + out.println("<th>Name</th>"); + out.println("<th>Load Time (us)</th>"); + out.println("<th>Loaded By</th>"); + out.println("<th>Heap (B)</th>"); + out.println("<th>Pages</th>"); + out.println("</tr></thead>"); + + for (LoadedClass clazz : classes) { + out.println("<tr>"); + out.println("<td>" + clazz.name + "</td>"); + out.println("<td>" + clazz.medianTimeMicros() + "</td>"); + + out.println("<td>"); + Set<String> procNames = new TreeSet<String>(); + for (Operation op : clazz.loads) procNames.add(op.process.name); + for (Operation op : clazz.initializations) { + procNames.add(op.process.name); + } + if (procNames.size() <= 3) { + for (String name : procNames) { + out.print(name + "<br/>"); + } + } else { + Iterator<String> i = procNames.iterator(); + out.print(i.next() + "<br/>"); + out.print(i.next() + "<br/>"); + out.print("...and " + (procNames.size() - 2) + + " others."); + } + out.println("</td>"); + + if (clazz.memoryUsage.isAvailable()) { + MemoryUsage subtracted + = clazz.memoryUsage.subtract(baseline); + + out.println("<td>" + (subtracted.javaHeapSize() + + subtracted.nativeHeapSize) + "</td>"); + out.println("<td>" + subtracted.totalPages() + "</td>"); + } else { + for (int i = 0; i < 2; i++) { + out.println("<td>n/a</td>"); + } + } + + out.println("</tr>"); + } + + out.println("</table>"); + } +} diff --git a/tools/preload/Proc.java b/tools/preload/Proc.java index 66e04dc..2105021 100644 --- a/tools/preload/Proc.java +++ b/tools/preload/Proc.java @@ -14,13 +14,11 @@ * limitations under the License. */ -import java.util.Arrays; import java.util.List; import java.util.ArrayList; import java.util.LinkedList; import java.util.Map; import java.util.HashMap; -import java.util.Collections; import java.io.Serializable; /** @@ -30,11 +28,6 @@ class Proc implements Serializable { private static final long serialVersionUID = 0; - /** - * Default percentage of time to cut off of app class loading times. - */ - static final int PERCENTAGE_TO_PRELOAD = 75; - /** Parent process. */ final Proc parent; @@ -80,72 +73,11 @@ class Proc implements Serializable { } /** - * Returns the percentage of time we should cut by preloading for this - * app. - */ - int percentageToPreload() { - return PERCENTAGE_TO_PRELOAD; - } - - /** - * Returns a list of classes which should be preloaded. + * Returns true if this process comes from the zygote. */ - List<LoadedClass> highestRankedClasses() { - if (!isApplication() || Policy.isService(this.name)) { - return Collections.emptyList(); - } - - // Sort by rank. - Operation[] ranked = new Operation[operations.size()]; - ranked = operations.toArray(ranked); - Arrays.sort(ranked, new ClassRank()); - - // The percentage of time to save by preloading. - int timeToSave = totalTimeMicros() * percentageToPreload() / 100; - int timeSaved = 0; - - int count = 0; - List<LoadedClass> highest = new ArrayList<LoadedClass>(); - for (Operation operation : ranked) { - if (timeSaved >= timeToSave || count++ > 100) { - break; - } - - if (!Policy.isPreloadableClass(operation.loadedClass.name)) { - continue; - } - - if (!operation.loadedClass.systemClass) { - continue; - } - - highest.add(operation.loadedClass); - timeSaved += operation.medianExclusiveTimeMicros(); - } - - return highest; - } - - /** - * Total time spent class loading and initializing. - */ - int totalTimeMicros() { - int totalTime = 0; - for (Operation operation : operations) { - totalTime += operation.medianExclusiveTimeMicros(); - } - return totalTime; - } - - /** - * Returns true if this process is an app. - */ - public boolean isApplication() { - if (name.equals("com.android.development")) { - return false; - } - - return parent != null && parent.name.equals("zygote"); + public boolean fromZygote() { + return parent != null && parent.name.equals("zygote") + && !name.equals("com.android.development"); } /** diff --git a/tools/preload/Root.java b/tools/preload/Root.java index 949f9b7..0bc29bf 100644 --- a/tools/preload/Root.java +++ b/tools/preload/Root.java @@ -46,7 +46,7 @@ public class Root implements Serializable { final Map<String, LoadedClass> loadedClasses = new HashMap<String, LoadedClass>(); - final MemoryUsage baseline = MemoryUsage.baseline(); + MemoryUsage baseline = MemoryUsage.baseline(); /** * Records class loads and initializations. diff --git a/tools/preload/WritePreloadedClassFile.java b/tools/preload/WritePreloadedClassFile.java index b209af0..96c539b 100644 --- a/tools/preload/WritePreloadedClassFile.java +++ b/tools/preload/WritePreloadedClassFile.java @@ -24,12 +24,18 @@ import java.util.Set; import java.util.TreeSet; /** - * Writes /frameworks/base/preloaded-classes. Also updates LoadedClass.preloaded - * fields and writes over compiled log file. + * Writes /frameworks/base/preloaded-classes. Also updates + * {@link LoadedClass#preloaded} fields and writes over compiled log file. */ public class WritePreloadedClassFile { - public static void main(String[] args) throws IOException, ClassNotFoundException { + /** + * Preload any class that take longer to load than MIN_LOAD_TIME_MICROS us. + */ + static final int MIN_LOAD_TIME_MICROS = 1250; + + public static void main(String[] args) throws IOException, + ClassNotFoundException { if (args.length != 1) { System.err.println("Usage: WritePreloadedClassFile [compiled log]"); System.exit(-1); @@ -44,48 +50,64 @@ public class WritePreloadedClassFile { // Open preloaded-classes file for output. Writer out = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(Policy.getPreloadedClassFileName()), + new FileOutputStream(Policy.PRELOADED_CLASS_FILE), Charset.forName("US-ASCII"))); - out.write("# Classes which are preloaded by com.android.internal.os.ZygoteInit.\n"); - out.write("# Automatically generated by /frameworks/base/tools/preload.\n"); - out.write("# percent=" + Proc.PERCENTAGE_TO_PRELOAD - + ", weight=" + ClassRank.SEQUENCE_WEIGHT - + ", bucket_size=" + ClassRank.BUCKET_SIZE - + "\n"); - + out.write("# Classes which are preloaded by" + + " com.android.internal.os.ZygoteInit.\n"); + out.write("# Automatically generated by frameworks/base/tools/preload/" + + WritePreloadedClassFile.class.getSimpleName() + ".java.\n"); + out.write("# MIN_LOAD_TIME_MICROS=" + MIN_LOAD_TIME_MICROS + "\n"); + + /* + * The set of classes to preload. We preload a class if: + * + * a) it's loaded in the bootclasspath (i.e., is a system class) + * b) it takes > MIN_LOAD_TIME_MICROS us to load, and + * c) it's loaded by more than one process, or it's loaded by an + * application (i.e., not a long running service) + */ Set<LoadedClass> toPreload = new TreeSet<LoadedClass>(); - // Preload all classes that were loaded by at least 2 apps, if both - // apps run at the same time, they'll share memory. + // Preload classes that were loaded by at least 2 processes. Hopefully, + // the memory associated with these classes will be shared. for (LoadedClass loadedClass : root.loadedClasses.values()) { - if (!loadedClass.isPreloadable()) { - continue; - } - - Set<String> appNames = loadedClass.applicationNames(); - - if (appNames.size() > 3) { + Set<String> names = loadedClass.processNames(); + if (shouldPreload(loadedClass) && names.size() > 1) { toPreload.add(loadedClass); } } - // Try to make individual apps start faster by preloading slowest - // classes. + int initialSize = toPreload.size(); + System.out.println(initialSize + + " classses were loaded by more than one app."); + + // Preload eligable classes from applications (not long-running + // services). for (Proc proc : root.processes.values()) { - toPreload.addAll(proc.highestRankedClasses()); + if (proc.fromZygote() && !Policy.isService(proc.name)) { + for (Operation operation : proc.operations) { + LoadedClass loadedClass = operation.loadedClass; + if (shouldPreload(loadedClass)) { + toPreload.add(loadedClass); + } + } + } } - System.out.println(toPreload.size() + " classes will be preloaded."); + System.out.println("Added " + (toPreload.size() - initialSize) + + " more to speed up applications."); - // Make classes that were already loaded by the zygote explicit. + System.out.println(toPreload.size() + + " total classes will be preloaded."); + + // Make classes that were implicitly loaded by the zygote explicit. // This adds minimal overhead but avoid confusion about classes not // appearing in the list. - addAllClassesFor("zygote", root, toPreload); + addAllClassesFrom("zygote", root, toPreload); for (LoadedClass loadedClass : toPreload) { - out.write(loadedClass.name); - out.write('\n'); + out.write(loadedClass.name + "\n"); } out.close(); @@ -97,18 +119,26 @@ public class WritePreloadedClassFile { root.toFile(rootFile); } - private static void addAllClassesFor(String packageName, Root root, - Set<LoadedClass> toPreload) { + private static void addAllClassesFrom(String processName, Root root, + Set<LoadedClass> toPreload) { for (Proc proc : root.processes.values()) { - if (proc.name.equals(packageName)) { + if (proc.name.equals(processName)) { for (Operation operation : proc.operations) { - // TODO: I'm not sure how the zygote loaded classes that - // aren't supposed to be preloadable... - if (operation.loadedClass.isPreloadable()) { + boolean preloadable + = Policy.isPreloadable(operation.loadedClass); + if (preloadable) { toPreload.add(operation.loadedClass); } } } } } + + /** + * Returns true if the class should be preloaded. + */ + private static boolean shouldPreload(LoadedClass clazz) { + return Policy.isPreloadable(clazz) + && clazz.medianTimeMicros() > MIN_LOAD_TIME_MICROS; + } } diff --git a/tools/preload/loadclass/LoadClass.java b/tools/preload/loadclass/LoadClass.java index 471cc84..a71b6a8 100644 --- a/tools/preload/loadclass/LoadClass.java +++ b/tools/preload/loadclass/LoadClass.java @@ -35,7 +35,11 @@ class LoadClass { if (args.length > 0) { try { + long start = System.currentTimeMillis(); Class.forName(args[0]); + long elapsed = System.currentTimeMillis() - start; + Log.i("LoadClass", "Loaded " + args[0] + " in " + elapsed + + "ms."); } catch (ClassNotFoundException e) { Log.w("LoadClass", e); return; diff --git a/tools/preload/preload.ipr b/tools/preload/preload.ipr index f78bf76..0c9621c 100644 --- a/tools/preload/preload.ipr +++ b/tools/preload/preload.ipr @@ -25,7 +25,28 @@ <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" /> </component> <component name="CodeStyleSettingsManager"> - <option name="PER_PROJECT_SETTINGS" /> + <option name="PER_PROJECT_SETTINGS"> + <value> + <ADDITIONAL_INDENT_OPTIONS fileType="java"> + <option name="INDENT_SIZE" value="4" /> + <option name="CONTINUATION_INDENT_SIZE" value="8" /> + <option name="TAB_SIZE" value="4" /> + <option name="USE_TAB_CHARACTER" value="false" /> + <option name="SMART_TABS" value="false" /> + <option name="LABEL_INDENT_SIZE" value="0" /> + <option name="LABEL_INDENT_ABSOLUTE" value="false" /> + </ADDITIONAL_INDENT_OPTIONS> + <ADDITIONAL_INDENT_OPTIONS fileType="xml"> + <option name="INDENT_SIZE" value="4" /> + <option name="CONTINUATION_INDENT_SIZE" value="8" /> + <option name="TAB_SIZE" value="4" /> + <option name="USE_TAB_CHARACTER" value="false" /> + <option name="SMART_TABS" value="false" /> + <option name="LABEL_INDENT_SIZE" value="0" /> + <option name="LABEL_INDENT_ABSOLUTE" value="false" /> + </ADDITIONAL_INDENT_OPTIONS> + </value> + </option> <option name="USE_PER_PROJECT_SETTINGS" value="false" /> </component> <component name="CompilerConfiguration"> @@ -405,6 +426,7 @@ </component> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Perforce" /> + <mapping directory="/Volumes/Android/donut/frameworks/base" vcs="Git" /> </component> <component name="VssConfiguration"> <option name="CLIENT_PATH" value="" /> diff --git a/tools/preload/sorttable.js b/tools/preload/sorttable.js new file mode 100644 index 0000000..25bccb2 --- /dev/null +++ b/tools/preload/sorttable.js @@ -0,0 +1,493 @@ +/* + SortTable + version 2 + 7th April 2007 + Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ + + Instructions: + Download this file + Add <script src="sorttable.js"></script> to your HTML + Add class="sortable" to any table you'd like to make sortable + Click on the headers to sort + + Thanks to many, many people for contributions and suggestions. + Licenced as X11: http://www.kryogenix.org/code/browser/licence.html + This basically means: do what you want with it. +*/ + + +var stIsIE = /*@cc_on!@*/false; + +sorttable = { + init: function() { + // quit if this function has already been called + if (arguments.callee.done) return; + // flag this function so we don't do the same thing twice + arguments.callee.done = true; + // kill the timer + if (_timer) clearInterval(_timer); + + if (!document.createElement || !document.getElementsByTagName) return; + + sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; + + forEach(document.getElementsByTagName('table'), function(table) { + if (table.className.search(/\bsortable\b/) != -1) { + sorttable.makeSortable(table); + } + }); + + }, + + makeSortable: function(table) { + if (table.getElementsByTagName('thead').length == 0) { + // table doesn't have a tHead. Since it should have, create one and + // put the first table row in it. + the = document.createElement('thead'); + the.appendChild(table.rows[0]); + table.insertBefore(the,table.firstChild); + } + // Safari doesn't support table.tHead, sigh + if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; + + if (table.tHead.rows.length != 1) return; // can't cope with two header rows + + // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as + // "total" rows, for example). This is B&R, since what you're supposed + // to do is put them in a tfoot. So, if there are sortbottom rows, + // for backwards compatibility, move them to tfoot (creating it if needed). + sortbottomrows = []; + for (var i=0; i<table.rows.length; i++) { + if (table.rows[i].className.search(/\bsortbottom\b/) != -1) { + sortbottomrows[sortbottomrows.length] = table.rows[i]; + } + } + if (sortbottomrows) { + if (table.tFoot == null) { + // table doesn't have a tfoot. Create one. + tfo = document.createElement('tfoot'); + table.appendChild(tfo); + } + for (var i=0; i<sortbottomrows.length; i++) { + tfo.appendChild(sortbottomrows[i]); + } + delete sortbottomrows; + } + + // work through each column and calculate its type + headrow = table.tHead.rows[0].cells; + for (var i=0; i<headrow.length; i++) { + // manually override the type with a sorttable_type attribute + if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col + mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/); + if (mtch) { override = mtch[1]; } + if (mtch && typeof sorttable["sort_"+override] == 'function') { + headrow[i].sorttable_sortfunction = sorttable["sort_"+override]; + } else { + headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); + } + // make it clickable to sort + headrow[i].sorttable_columnindex = i; + headrow[i].sorttable_tbody = table.tBodies[0]; + dean_addEvent(headrow[i],"click", function(e) { + + if (this.className.search(/\bsorttable_sorted\b/) != -1) { + // if we're already sorted by this column, just + // reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted', + 'sorttable_sorted_reverse'); + this.removeChild(document.getElementById('sorttable_sortfwdind')); + sortrevind = document.createElement('span'); + sortrevind.id = "sorttable_sortrevind"; + sortrevind.innerHTML = stIsIE ? ' <font face="webdings">5</font>' : ' ▴'; + this.appendChild(sortrevind); + return; + } + if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) { + // if we're already sorted by this column in reverse, just + // re-reverse the table, which is quicker + sorttable.reverse(this.sorttable_tbody); + this.className = this.className.replace('sorttable_sorted_reverse', + 'sorttable_sorted'); + this.removeChild(document.getElementById('sorttable_sortrevind')); + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + return; + } + + // remove sorttable_sorted classes + theadrow = this.parentNode; + forEach(theadrow.childNodes, function(cell) { + if (cell.nodeType == 1) { // an element + cell.className = cell.className.replace('sorttable_sorted_reverse',''); + cell.className = cell.className.replace('sorttable_sorted',''); + } + }); + sortfwdind = document.getElementById('sorttable_sortfwdind'); + if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); } + sortrevind = document.getElementById('sorttable_sortrevind'); + if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); } + + this.className += ' sorttable_sorted'; + sortfwdind = document.createElement('span'); + sortfwdind.id = "sorttable_sortfwdind"; + sortfwdind.innerHTML = stIsIE ? ' <font face="webdings">6</font>' : ' ▾'; + this.appendChild(sortfwdind); + + // build an array to sort. This is a Schwartzian transform thing, + // i.e., we "decorate" each row with the actual sort key, + // sort based on the sort keys, and then put the rows back in order + // which is a lot faster because you only do getInnerText once per row + row_array = []; + col = this.sorttable_columnindex; + rows = this.sorttable_tbody.rows; + for (var j=0; j<rows.length; j++) { + row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]]; + } + /* If you want a stable sort, uncomment the following line */ + //sorttable.shaker_sort(row_array, this.sorttable_sortfunction); + /* and comment out this one */ + row_array.sort(this.sorttable_sortfunction); + + tb = this.sorttable_tbody; + for (var j=0; j<row_array.length; j++) { + tb.appendChild(row_array[j][1]); + } + + delete row_array; + }); + } + } + }, + + guessType: function(table, column) { + // guess the type of a column based on its first non-blank row + sortfn = sorttable.sort_alpha; + for (var i=0; i<table.tBodies[0].rows.length; i++) { + text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]); + if (text != '') { + if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) { + return sorttable.sort_numeric; + } + // check for a date: dd/mm/yyyy or dd/mm/yy + // can have / or . or - as separator + // can be mm/dd as well + possdate = text.match(sorttable.DATE_RE) + if (possdate) { + // looks like a date + first = parseInt(possdate[1]); + second = parseInt(possdate[2]); + if (first > 12) { + // definitely dd/mm + return sorttable.sort_ddmm; + } else if (second > 12) { + return sorttable.sort_mmdd; + } else { + // looks like a date, but we can't tell which, so assume + // that it's dd/mm (English imperialism!) and keep looking + sortfn = sorttable.sort_ddmm; + } + } + } + } + return sortfn; + }, + + getInnerText: function(node) { + // gets the text we want to use for sorting for a cell. + // strips leading and trailing whitespace. + // this is *not* a generic getInnerText function; it's special to sorttable. + // for example, you can override the cell text with a customkey attribute. + // it also gets .value for <input> fields. + + hasInputs = (typeof node.getElementsByTagName == 'function') && + node.getElementsByTagName('input').length; + + if (node.getAttribute("sorttable_customkey") != null) { + return node.getAttribute("sorttable_customkey"); + } + else if (typeof node.textContent != 'undefined' && !hasInputs) { + return node.textContent.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.innerText != 'undefined' && !hasInputs) { + return node.innerText.replace(/^\s+|\s+$/g, ''); + } + else if (typeof node.text != 'undefined' && !hasInputs) { + return node.text.replace(/^\s+|\s+$/g, ''); + } + else { + switch (node.nodeType) { + case 3: + if (node.nodeName.toLowerCase() == 'input') { + return node.value.replace(/^\s+|\s+$/g, ''); + } + case 4: + return node.nodeValue.replace(/^\s+|\s+$/g, ''); + break; + case 1: + case 11: + var innerText = ''; + for (var i = 0; i < node.childNodes.length; i++) { + innerText += sorttable.getInnerText(node.childNodes[i]); + } + return innerText.replace(/^\s+|\s+$/g, ''); + break; + default: + return ''; + } + } + }, + + reverse: function(tbody) { + // reverse the rows in a tbody + newrows = []; + for (var i=0; i<tbody.rows.length; i++) { + newrows[newrows.length] = tbody.rows[i]; + } + for (var i=newrows.length-1; i>=0; i--) { + tbody.appendChild(newrows[i]); + } + delete newrows; + }, + + /* sort functions + each sort function takes two parameters, a and b + you are comparing a[0] and b[0] */ + sort_numeric: function(a,b) { + aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); + if (isNaN(aa)) aa = 0; + bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); + if (isNaN(bb)) bb = 0; + return aa-bb; + }, + sort_alpha: function(a,b) { + if (a[0]==b[0]) return 0; + if (a[0]<b[0]) return -1; + return 1; + }, + sort_ddmm: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; m = mtch[2]; d = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + sort_mmdd: function(a,b) { + mtch = a[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt1 = y+m+d; + mtch = b[0].match(sorttable.DATE_RE); + y = mtch[3]; d = mtch[2]; m = mtch[1]; + if (m.length == 1) m = '0'+m; + if (d.length == 1) d = '0'+d; + dt2 = y+m+d; + if (dt1==dt2) return 0; + if (dt1<dt2) return -1; + return 1; + }, + + shaker_sort: function(list, comp_func) { + // A stable sort function to allow multi-level sorting of data + // see: http://en.wikipedia.org/wiki/Cocktail_sort + // thanks to Joseph Nahmias + var b = 0; + var t = list.length - 1; + var swap = true; + + while(swap) { + swap = false; + for(var i = b; i < t; ++i) { + if ( comp_func(list[i], list[i+1]) > 0 ) { + var q = list[i]; list[i] = list[i+1]; list[i+1] = q; + swap = true; + } + } // for + t--; + + if (!swap) break; + + for(var i = t; i > b; --i) { + if ( comp_func(list[i], list[i-1]) < 0 ) { + var q = list[i]; list[i] = list[i-1]; list[i-1] = q; + swap = true; + } + } // for + b++; + + } // while(swap) + } +} + +/* ****************************************************************** + Supporting functions: bundled here to avoid depending on a library + ****************************************************************** */ + +// Dean Edwards/Matthias Miller/John Resig + +/* for Mozilla/Opera9 */ +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", sorttable.init, false); +} + +/* for Internet Explorer */ +/*@cc_on @*/ +/*@if (@_win32) + document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); + var script = document.getElementById("__ie_onload"); + script.onreadystatechange = function() { + if (this.readyState == "complete") { + sorttable.init(); // call the onload handler + } + }; +/*@end @*/ + +/* for Safari */ +if (/WebKit/i.test(navigator.userAgent)) { // sniff + var _timer = setInterval(function() { + if (/loaded|complete/.test(document.readyState)) { + sorttable.init(); // call the onload handler + } + }, 10); +} + +/* for other browsers */ +window.onload = sorttable.init; + +// written by Dean Edwards, 2005 +// with input from Tino Zijdel, Matthias Miller, Diego Perini + +// http://dean.edwards.name/weblog/2005/10/add-event/ + +function dean_addEvent(element, type, handler) { + if (element.addEventListener) { + element.addEventListener(type, handler, false); + } else { + // assign each event handler a unique ID + if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; + // create a hash table of event types for the element + if (!element.events) element.events = {}; + // create a hash table of event handlers for each element/event pair + var handlers = element.events[type]; + if (!handlers) { + handlers = element.events[type] = {}; + // store the existing event handler (if there is one) + if (element["on" + type]) { + handlers[0] = element["on" + type]; + } + } + // store the event handler in the hash table + handlers[handler.$$guid] = handler; + // assign a global event handler to do all the work + element["on" + type] = handleEvent; + } +}; +// a counter used to create unique IDs +dean_addEvent.guid = 1; + +function removeEvent(element, type, handler) { + if (element.removeEventListener) { + element.removeEventListener(type, handler, false); + } else { + // delete the event handler from the hash table + if (element.events && element.events[type]) { + delete element.events[type][handler.$$guid]; + } + } +}; + +function handleEvent(event) { + var returnValue = true; + // grab the event object (IE uses a global event object) + event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); + // get a reference to the hash table of event handlers + var handlers = this.events[event.type]; + // execute each event handler + for (var i in handlers) { + this.$$handleEvent = handlers[i]; + if (this.$$handleEvent(event) === false) { + returnValue = false; + } + } + return returnValue; +}; + +function fixEvent(event) { + // add W3C standard event methods + event.preventDefault = fixEvent.preventDefault; + event.stopPropagation = fixEvent.stopPropagation; + return event; +}; +fixEvent.preventDefault = function() { + this.returnValue = false; +}; +fixEvent.stopPropagation = function() { + this.cancelBubble = true; +} + +// Dean's forEach: http://dean.edwards.name/base/forEach.js +/* + forEach, version 1.0 + Copyright 2006, Dean Edwards + License: http://www.opensource.org/licenses/mit-license.php +*/ + +// array-like enumeration +if (!Array.forEach) { // mozilla already supports this + Array.forEach = function(array, block, context) { + for (var i = 0; i < array.length; i++) { + block.call(context, array[i], i, array); + } + }; +} + +// generic enumeration +Function.prototype.forEach = function(object, block, context) { + for (var key in object) { + if (typeof this.prototype[key] == "undefined") { + block.call(context, object[key], key, object); + } + } +}; + +// character enumeration +String.forEach = function(string, block, context) { + Array.forEach(string.split(""), function(chr, index) { + block.call(context, chr, index, string); + }); +}; + +// globally resolve forEach enumeration +var forEach = function(object, block, context) { + if (object) { + var resolve = Object; // default + if (object instanceof Function) { + // functions have a "length" property + resolve = Function; + } else if (object.forEach instanceof Function) { + // the object implements a custom forEach method so use that + object.forEach(block, context); + return; + } else if (typeof object == "string") { + // the object is a string + resolve = String; + } else if (typeof object.length == "number") { + // the object is array-like + resolve = Array; + } + resolve.forEach(object, block, context); + } +}; + |