Extending SysUI proto dump to WMShell

Bug: 161980310
Test: adb shell cmd statusbar tracing start/stop
      adb pull /data/user_de/0/com.android.systemui/files/sysui_trace.pb

Change-Id: Ie99eac753905ee9938a84571943c85b0a2ad29ee
diff --git a/libs/WindowManager/Shell/Android.bp b/libs/WindowManager/Shell/Android.bp
index 307b82e..16b87c4 100644
--- a/libs/WindowManager/Shell/Android.bp
+++ b/libs/WindowManager/Shell/Android.bp
@@ -83,6 +83,16 @@
 }
 // End ProtoLog
 
+java_library {
+    name: "WindowManager-Shell-proto",
+
+    srcs: ["proto/*.proto"],
+
+    proto: {
+        type: "nano",
+    },
+}
+
 android_library {
     name: "WindowManager-Shell",
     srcs: [
@@ -94,6 +104,7 @@
     ],
     static_libs: [
         "protolog-lib",
+        "WindowManager-Shell-proto",
     ],
     manifest: "AndroidManifest.xml",
 }
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/proto/wm_shell_trace.proto b/libs/WindowManager/Shell/proto/wm_shell_trace.proto
new file mode 100644
index 0000000..b9e7252
--- /dev/null
+++ b/libs/WindowManager/Shell/proto/wm_shell_trace.proto
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+syntax = "proto2";
+
+package com.android.wm.shell;
+
+option java_multiple_files = true;
+
+message WmShellTraceProto {
+
+    // Not used, just a test value
+    optional bool test_value = 1;
+}
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 0f2e25c..a9a5671 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -22,6 +22,10 @@
     proto: {
         type: "nano",
     },
+
+    libs: [
+        "WindowManager-Shell-proto",
+    ],
 }
 
 java_library {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
index a1b55c4..92d2f42 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
@@ -584,7 +584,7 @@
             }
         }
 
-        Dependency.get(ProtoTracer.class).update();
+        Dependency.get(ProtoTracer.class).scheduleFrameUpdate();
     }
 
     private void updateDisabledForQuickstep() {
diff --git a/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto b/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto
index d940a6b..eb23b9d 100644
--- a/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto
+++ b/packages/SystemUI/src/com/android/systemui/tracing/sysui_trace.proto
@@ -16,6 +16,8 @@
 
 syntax = "proto2";
 
+import "frameworks/base/libs/WindowManager/Shell/proto/wm_shell_trace.proto";
+
 package com.android.systemui.tracing;
 
 option java_multiple_files = true;
@@ -23,6 +25,7 @@
 message SystemUiTraceProto {
 
     optional EdgeBackGestureHandlerProto edge_back_gesture_handler = 1;
+    optional com.android.wm.shell.WmShellTraceProto wm_shell = 2;
 }
 
 message EdgeBackGestureHandlerProto {
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
index e4ff1b5..ee404ca 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
@@ -27,8 +27,12 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.TaskStackChangeListener;
+import com.android.systemui.shared.tracing.ProtoTraceable;
 import com.android.systemui.stackdivider.SplitScreen;
+import com.android.systemui.tracing.ProtoTracer;
+import com.android.systemui.tracing.nano.SystemUiTraceProto;
 import com.android.wm.shell.common.DisplayImeController;
+import com.android.wm.shell.nano.WmShellTraceProto;
 import com.android.wm.shell.protolog.ShellProtoLogImpl;
 
 import java.io.FileDescriptor;
@@ -42,19 +46,23 @@
  * Proxy in SysUiScope to delegate events to controllers in WM Shell library.
  */
 @SysUISingleton
-public final class WMShell extends SystemUI {
+public final class WMShell extends SystemUI implements ProtoTraceable<SystemUiTraceProto> {
     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
     private final DisplayImeController mDisplayImeController;
     private final Optional<SplitScreen> mSplitScreenOptional;
+    private final ProtoTracer mProtoTracer;
 
     @Inject
     WMShell(Context context, KeyguardUpdateMonitor keyguardUpdateMonitor,
             DisplayImeController displayImeController,
-            Optional<SplitScreen> splitScreenOptional) {
+            Optional<SplitScreen> splitScreenOptional,
+            ProtoTracer protoTracer) {
         super(context);
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mDisplayImeController = displayImeController;
         mSplitScreenOptional = splitScreenOptional;
+        mProtoTracer = protoTracer;
+        mProtoTracer.add(this);
     }
 
     @Override
@@ -114,6 +122,15 @@
     }
 
     @Override
+    public void writeToProto(SystemUiTraceProto proto) {
+        if (proto.wmShell == null) {
+            proto.wmShell = new WmShellTraceProto();
+        }
+        // Dump to WMShell proto here
+        // TODO: Figure out how we want to synchronize while dumping to proto
+    }
+
+    @Override
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         // Handle commands if provided
         for (int i = 0; i < args.length; i++) {