OSDN Git Service

Memory profiling changes : Updated the Bluetooth code to handle cleaning up of object...
authorRavi Nagarajan <nravi@broadcom.com>
Thu, 19 Apr 2012 17:40:43 +0000 (10:40 -0700)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 17 Jul 2012 05:00:58 +0000 (22:00 -0700)
Change-Id: I2b0235f71c1feaf32215b2aaf89a2e06d8fa7d73

12 files changed:
src/com/android/bluetooth/a2dp/A2dpService.java
src/com/android/bluetooth/a2dp/A2dpStateMachine.java
src/com/android/bluetooth/btservice/AdapterState.java [changed mode: 0644->0755]
src/com/android/bluetooth/hdp/HealthService.java [changed mode: 0644->0755]
src/com/android/bluetooth/hfp/HeadsetService.java
src/com/android/bluetooth/hfp/HeadsetStateMachine.java
src/com/android/bluetooth/hid/HidService.java
src/com/android/bluetooth/opp/BluetoothOppRfcommListener.java [changed mode: 0644->0755]
src/com/android/bluetooth/opp/BluetoothOppService.java [changed mode: 0644->0755]
src/com/android/bluetooth/opp/BluetoothOppTransfer.java
src/com/android/bluetooth/pan/PanService.java [changed mode: 0644->0755]
src/com/android/bluetooth/pbap/BluetoothPbapService.java [changed mode: 0644->0755]

index c33d5ed..e0bfe75 100755 (executable)
@@ -81,6 +81,8 @@ public class A2dpService extends Service {
     public void onDestroy() {
         super.onDestroy();
         if (DBG) log("Destroying service.");
+        if(mAdapter != null)
+            mAdapter = null;
     }
 
    private void start() {
index abd5578..fe49971 100755 (executable)
@@ -108,6 +108,10 @@ final class A2dpStateMachine extends StateMachine {
 
     public void cleanup() {
         cleanupNative();
+        if(mContext != null)
+            mContext = null;
+        if(mAdapter != null)
+            mAdapter = null;
     }
 
         private class Disconnected extends State {
old mode 100644 (file)
new mode 100755 (executable)
index fd475bf..5042360
@@ -60,6 +60,12 @@ final class AdapterState extends StateMachine {
     }
 
     public void cleanup() {
+        if(mAdapterProperties != null)
+            mAdapterProperties = null;
+        if(mAdapterService != null)
+            mAdapterService = null;
+        if(mContext != null)
+            mContext = null;
     }
 
     private class OffState extends State {
old mode 100644 (file)
new mode 100755 (executable)
index af6b0b6..8b80776
@@ -106,6 +106,23 @@ public class HealthService extends Service {
     public void onDestroy() {
         super.onDestroy();
         if (DBG) log("Destroying service.");
+
+        //Cleanup other object references
+        if(mHealthChannels != null) {
+            mHealthChannels.clear();
+            mHealthChannels = null;
+        }
+        if(mHealthDevices != null) {
+            mHealthDevices.clear();
+            mHealthDevices = null;
+        }
+        if(mApps != null) {
+            mApps.clear();
+            mApps = null;
+        }
+        if(mAdapter != null)
+            mAdapter = null;
+
     }
 
     private void start() {
@@ -132,10 +149,12 @@ public class HealthService extends Service {
         if (DBG) log("stop()");
 
         //Cleanup looper
+        mHandler.removeCallbacksAndMessages(null);
         Looper looper = mHandler.getLooper();
         if (looper != null) {
             looper.quit();
         }
+        mHandler = null;
 
         //Cleanup native
         cleanupNative();
index c07016c..bb0bd43 100755 (executable)
@@ -86,6 +86,13 @@ public class HeadsetService extends Service {
     public void onDestroy() {
         super.onDestroy();
         if (DBG) log("Destroying service.");
+        if(mAdapter != null)
+            mAdapter = null;
+        if(mStateMachine != null)
+        {
+            mStateMachine.quit();
+            mStateMachine = null;
+        }
     }
 
     private void start() {
index 6b768ad..38beed0 100755 (executable)
@@ -197,6 +197,8 @@ final class HeadsetStateMachine extends StateMachine {
                 }
         }
         }
+        if(mContext != null)
+            mContext = null;
     }
 
     private class Disconnected extends State {
index 8d09044..4096ca8 100755 (executable)
@@ -104,6 +104,12 @@ public class HidService extends Service {
     public void onDestroy() {
         super.onDestroy();
         if (DBG) log("Destroying service.");
+        if(mAdapter != null)
+            mAdapter = null;
+        if(mInputDevices != null) {
+            mInputDevices.clear();
+            mInputDevices = null;
+        }
     }
 
     private void start() {
old mode 100644 (file)
new mode 100755 (executable)
index 2e4f200..b90d201
@@ -182,6 +182,7 @@ public class BluetoothOppRfcommListener {
                 if (mTcpServerSocket != null) {
                     try {
                         mTcpServerSocket.close();
+                        mTcpServerSocket = null;
                     } catch (IOException e) {
                         Log.e(TAG, "Error close mTcpServerSocket");
                     }
@@ -192,6 +193,7 @@ public class BluetoothOppRfcommListener {
                 if (mBtServerSocket != null) {
                     try {
                         mBtServerSocket.close();
+                        mBtServerSocket = null;
                     } catch (IOException e) {
                         Log.e(TAG, "Error close mBtServerSocket");
                     }
old mode 100644 (file)
new mode 100755 (executable)
index c348e33..654a47a
@@ -322,6 +322,43 @@ public class BluetoothOppService extends Service {
         getContentResolver().unregisterContentObserver(mObserver);
         unregisterReceiver(mBluetoothReceiver);
         mSocketListener.stop();
+        _cleanup();
+    }
+
+    /* Cleanup all local references. Called during onDestroy */
+    private void _cleanup() {
+        if(mBatchs != null) {
+            mBatchs.clear();
+            mBatchs = null;
+        }
+        if(mShares != null) {
+            mShares.clear();
+            mShares = null;
+        }
+        if(mObserver != null)
+            mObserver = null;
+        if(mNotifier != null)
+            mNotifier = null;
+        if(mHandler != null) {
+            mHandler.removeCallbacksAndMessages(null);
+            mHandler = null;
+        }
+        if(mSocketListener != null)
+            mSocketListener = null;
+        if(mPowerManager != null)
+            mPowerManager = null;
+        if(mPendingConnection != null)
+            mPendingConnection = null;
+        if(mTransfer != null) {
+            mTransfer.cleanup();
+            mTransfer = null;
+        }
+        if(mServerTransfer!= null) {
+            mServerTransfer.cleanup();
+            mServerTransfer = null;
+        }
+        if(mAdapter != null)
+            mAdapter = null;
     }
 
     /* suppose we auto accept an incoming OPUSH connection */
@@ -718,6 +755,7 @@ public class BluetoothOppService extends Service {
                         Log.e(TAG, "Unexpected error! batch id " + batch.mId
                                 + " doesn't match mTransfer id " + mTransfer.getBatchId());
                     }
+                    mTransfer.cleanup();
                     mTransfer = null;
                 } else {
                     if (mServerTransfer == null) {
@@ -729,6 +767,7 @@ public class BluetoothOppService extends Service {
                                 + " doesn't match mServerTransfer id "
                                 + mServerTransfer.getBatchId());
                     }
+                    mServerTransfer.cleanup();
                     mServerTransfer = null;
                 }
                 removeBatch(batch);
index 1f8690b..0893370 100755 (executable)
@@ -415,6 +415,28 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
         }
     }
 
+    /**
+     * Object cleanup
+     */
+    public void cleanup() {
+        if(mContext != null)
+            mContext = null;
+        if(mAdapter != null)
+            mAdapter = null;
+        if(mBatch != null) {
+            mBatch = null;
+        }
+        if(mSession != null)
+            mSession = null;
+        if(mCurrentShare != null)
+            mCurrentShare = null;
+        if(mTransport != null)
+            mTransport = null;
+        if(mSessionHandler != null) {
+            mSessionHandler = null;
+        }
+    }
+
     private void startObexSession() {
 
         mBatch.mStatus = Constants.BATCH_STATUS_RUNNING;
old mode 100644 (file)
new mode 100755 (executable)
index be130fd..8523646
@@ -114,6 +114,22 @@ public class PanService extends Service {
     public void onDestroy() {
         super.onDestroy();
         if (DBG) log("Stopping Bluetooth PanService");
+
+        //Cleanup referenced objects here
+        if(mAdapter != null)
+            mAdapter = null;
+        if(mPanDevices != null) {
+            mPanDevices.clear();
+            mPanDevices = null;
+        }
+        if(mBluetoothIfaceAddresses != null) {
+            mBluetoothIfaceAddresses.clear();
+            mBluetoothIfaceAddresses = null;
+        }
+        if(mPanIfName != null)
+            mPanIfName = null;
+        if(mHandler != null)
+            mHandler.removeCallbacksAndMessages(null);
     }
 
     private void start() {
old mode 100644 (file)
new mode 100755 (executable)
index b2b1d48..345b0c3
@@ -309,6 +309,11 @@ public class BluetoothPbapService extends Service {
             mWakeLock = null;
         }
         closeService();
+        if(mAdapter != null)
+            mAdapter = null;
+        if(mSessionStatusHandler != null) {
+            mSessionStatusHandler.removeCallbacksAndMessages(null);
+        }
     }
 
     @Override