Simplified algorithm used to generate the preloaded-classes list. Generated a new preloaded-classes file.
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$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$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.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.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$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$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.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.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.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.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.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.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.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.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.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.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$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.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.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.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.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.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.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.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
index dd61487..6dbeca0 100644
--- a/tools/preload/20090811.compiled
+++ b/tools/preload/20090811.compiled
Binary files differ
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 @@
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 @@
}
void measureMemoryUsage() {
-// this.memoryUsage = MemoryUsage.forClass(name);
+ this.memoryUsage = MemoryUsage.forClass(name);
}
int mlt = -1;
@@ -76,6 +76,10 @@
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 @@
}
}
- /** 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 @@
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 @@
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 @@
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 @@
* 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 @@
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.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 @@
/**
* 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 @@
));
/**
- * 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.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 @@
Root root = Root.fromFile(args[0]);
- System.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)");
+ printHeaders(System.out);
- MemoryUsage baseline = root.baseline;
+ MemoryUsage baseline = MemoryUsage.baseline();
for (LoadedClass loadedClass : root.loadedClasses.values()) {
if (!loadedClass.systemClass) {
continue;
}
- 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);
- for (String name : procNames) {
- System.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();
+ 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)");
+ }
+
+ 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('"');
+
+ 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) {
+ out.print(name + "\n");
+ }
+ } 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 @@
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 @@
}
/**
- * Returns the percentage of time we should cut by preloading for this
- * app.
+ * Returns true if this process comes from the zygote.
*/
- int percentageToPreload() {
- return PERCENTAGE_TO_PRELOAD;
- }
-
- /**
- * Returns a list of classes which should be preloaded.
- */
- 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 @@
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.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 @@
// 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 @@
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 @@
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);
+ }
+};
+