diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp
index 64a2a50..4775e4e 100644
--- a/services/surfaceflinger/Android.bp
+++ b/services/surfaceflinger/Android.bp
@@ -1,8 +1,6 @@
 cc_library_static {
     name: "libsurfaceflingerincludes",
     export_include_dirs: ["."],
-    static_libs = ["libserviceutils"],
-    export_static_lib_headers = ["libserviceutils"],
 }
 
 subdirs = ["tests/fakehwc"]
\ No newline at end of file
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index 390263f..1f4427a 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -67,10 +67,7 @@
     libtrace_proto \
     libvkjson \
     libvr_manager \
-    libvrflinger \
-    libserviceutils
-
-LOCAL_EXPORT_STATIC_LIBRARY_HEADERS := libserviceutils
+    libvrflinger
 
 LOCAL_SHARED_LIBRARIES := \
     android.frameworks.vr.composer@1.0 \
@@ -148,8 +145,7 @@
     libdl
 
 LOCAL_WHOLE_STATIC_LIBRARIES := libsigchain
-LOCAL_STATIC_LIBRARIES := libtrace_proto \
-    libserviceutils
+LOCAL_STATIC_LIBRARIES := libtrace_proto
 
 LOCAL_MODULE := surfaceflinger
 
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 5982422..f04cb88 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3459,7 +3459,8 @@
 
 // ---------------------------------------------------------------------------
 
-status_t SurfaceFlinger::doDump(int fd, const Vector<String16>& args) {
+status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args)
+{
     String8 result;
 
     IPCThreadState* ipc = IPCThreadState::self();
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 47ad7b9..e87d35f 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -47,8 +47,6 @@
 
 #include <hardware/hwcomposer_defs.h>
 
-#include <serviceutils/PriorityDumper.h>
-
 #include <system/graphics.h>
 
 #include <private/gui/LayerState.h>
@@ -107,7 +105,6 @@
 };
 
 class SurfaceFlinger : public BnSurfaceComposer,
-                       public PriorityDumper,
                        private IBinder::DeathRecipient,
 #ifdef USE_HWC2
                        private HWC2::ComposerCallback
@@ -275,7 +272,7 @@
      */
     virtual status_t onTransact(uint32_t code, const Parcel& data,
         Parcel* reply, uint32_t flags);
-    virtual status_t dump(int fd, const Vector<String16>& args) { return priorityDump(fd, args); }
+    virtual status_t dump(int fd, const Vector<String16>& args);
 
     /* ------------------------------------------------------------------------
      * ISurfaceComposer interface
@@ -595,13 +592,6 @@
     /* ------------------------------------------------------------------------
      * Debugging & dumpsys
      */
-public:
-    status_t dumpCritical(int fd, const Vector<String16>& /*args*/) {
-        return doDump(fd, Vector<String16>());
-    }
-
-    status_t dumpAll(int fd, const Vector<String16>& args) { return doDump(fd, args); }
-private:
     void listLayersLocked(const Vector<String16>& args, size_t& index, String8& result) const;
     void dumpStatsLocked(const Vector<String16>& args, size_t& index, String8& result) const;
     void clearStatsLocked(const Vector<String16>& args, size_t& index, String8& result);
@@ -626,7 +616,6 @@
     bool isLayerTripleBufferingDisabled() const {
         return this->mLayerTripleBufferingDisabled;
     }
-    status_t doDump(int fd, const Vector<String16>& args);
 
 #ifdef USE_HWC2
     /* ------------------------------------------------------------------------
diff --git a/services/surfaceflinger/main_surfaceflinger.cpp b/services/surfaceflinger/main_surfaceflinger.cpp
index 6a24891..e50f3ce 100644
--- a/services/surfaceflinger/main_surfaceflinger.cpp
+++ b/services/surfaceflinger/main_surfaceflinger.cpp
@@ -105,8 +105,7 @@
 
     // publish surface flinger
     sp<IServiceManager> sm(defaultServiceManager());
-    sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false,
-                   IServiceManager::DUMP_PRIORITY_CRITICAL);
+    sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);
 
     // publish GpuService
     sp<GpuService> gpuservice = new GpuService();
diff --git a/services/utils/Android.bp b/services/utils/Android.bp
index 6132956..4673491 100644
--- a/services/utils/Android.bp
+++ b/services/utils/Android.bp
@@ -20,6 +20,7 @@
 
     cflags: [
         "-Wall",
+        "-Wno-unused-parameter",
         "-Werror",
     ],
 
diff --git a/services/utils/PriorityDumper.cpp b/services/utils/PriorityDumper.cpp
index 9851188..555cf03 100644
--- a/services/utils/PriorityDumper.cpp
+++ b/services/utils/PriorityDumper.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "include/serviceutils/PriorityDumper.h"
+#include "include/PriorityDumper.h"
 
 namespace android {
 
@@ -25,35 +25,22 @@
     }
 }
 
-status_t PriorityDumper::dumpAll(int fd, const Vector<String16>& args) {
-    status_t status;
-    status = dumpCritical(fd, args);
-    if (status != OK) return status;
-    status = dumpHigh(fd, args);
-    if (status != OK) return status;
-    status = dumpNormal(fd, args);
-    if (status != OK) return status;
-    return status;
-}
-
-status_t PriorityDumper::priorityDump(int fd, const Vector<String16>& args) {
-    status_t status;
+void priorityDump(PriorityDumper& dumper, int fd, const Vector<String16>& args) {
     if (args.size() >= 2 && args[0] == PRIORITY_ARG) {
         String16 priority = args[1];
         Vector<String16> strippedArgs;
         getStrippedArgs(strippedArgs, args, 2);
         if (priority == PRIORITY_ARG_CRITICAL) {
-            status = dumpCritical(fd, strippedArgs);
+            dumper.dumpCritical(fd, strippedArgs);
         } else if (priority == PRIORITY_ARG_HIGH) {
-            status = dumpHigh(fd, strippedArgs);
+            dumper.dumpHigh(fd, strippedArgs);
         } else if (priority == PRIORITY_ARG_NORMAL) {
-            status = dumpNormal(fd, strippedArgs);
+            dumper.dumpNormal(fd, strippedArgs);
         } else {
-            status = dumpAll(fd, args);
+            dumper.dump(fd, args);
         }
     } else {
-        status = dumpAll(fd, args);
+        dumper.dump(fd, args);
     }
-    return status;
 }
-} // namespace android
+} // namespace android
\ No newline at end of file
diff --git a/services/utils/include/PriorityDumper.h b/services/utils/include/PriorityDumper.h
new file mode 100644
index 0000000..23e900d
--- /dev/null
+++ b/services/utils/include/PriorityDumper.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+#ifndef ANDROID_UTILS_PRIORITYDUMP_H
+#define ANDROID_UTILS_PRIORITYDUMP_H
+
+#include <utils/String16.h>
+#include <utils/Vector.h>
+
+namespace android {
+
+constexpr const char16_t PRIORITY_ARG[] = u"--dump-priority";
+constexpr const char16_t PRIORITY_ARG_CRITICAL[] = u"CRITICAL";
+constexpr const char16_t PRIORITY_ARG_HIGH[] = u"HIGH";
+constexpr const char16_t PRIORITY_ARG_NORMAL[] = u"NORMAL";
+
+// Helper class to split dumps into various priority buckets.
+class PriorityDumper {
+public:
+    // Dumps CRITICAL priority sections.
+    virtual void dumpCritical(int fd, const Vector<String16>& args) {}
+
+    // Dumps HIGH priority sections.
+    virtual void dumpHigh(int fd, const Vector<String16>& args) {}
+
+    // Dumps normal priority sections.
+    virtual void dumpNormal(int fd, const Vector<String16>& args) {}
+
+    // Dumps all sections.
+    // This method is called when priorityDump is called without priority
+    // arguments. By default, it calls all three dump methods.
+    virtual void dump(int fd, const Vector<String16>& args) {
+        dumpCritical(fd, args);
+        dumpHigh(fd, args);
+        dumpNormal(fd, args);
+    }
+    virtual ~PriorityDumper() = default;
+};
+
+// Parses the argument list checking if the first argument is --dump_priority and
+// the second argument is the priority type (HIGH, CRITICAL or NORMAL). If the
+// arguments are found, they are stripped and the appropriate PriorityDumper
+// method is called.
+// If --dump_priority argument is not passed, all supported sections are dumped.
+void priorityDump(PriorityDumper& dumper, int fd, const Vector<String16>& args);
+
+}; // namespace android
+
+#endif // ANDROID_UTILS_PRIORITYDUMP_H
diff --git a/services/utils/include/serviceutils/PriorityDumper.h b/services/utils/include/serviceutils/PriorityDumper.h
deleted file mode 100644
index 0319242..0000000
--- a/services/utils/include/serviceutils/PriorityDumper.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-#ifndef ANDROID_UTILS_PRIORITYDUMPER_H
-#define ANDROID_UTILS_PRIORITYDUMPER_H
-
-#include <utils/Errors.h>
-#include <utils/String16.h>
-#include <utils/Vector.h>
-
-namespace android {
-
-constexpr const char16_t PRIORITY_ARG[] = u"--dump-priority";
-constexpr const char16_t PRIORITY_ARG_CRITICAL[] = u"CRITICAL";
-constexpr const char16_t PRIORITY_ARG_HIGH[] = u"HIGH";
-constexpr const char16_t PRIORITY_ARG_NORMAL[] = u"NORMAL";
-
-// Helper class to split dumps into various priority buckets.
-class PriorityDumper {
-public:
-    // Parses the argument list checking if the first argument is --dump_priority and
-    // the second argument is the priority type (HIGH, CRITICAL or NORMAL). If the
-    // arguments are found, they are stripped and the appropriate PriorityDumper
-    // method is called.
-    // If --dump_priority argument is not passed, all supported sections are dumped.
-    status_t priorityDump(int fd, const Vector<String16>& args);
-
-    // Dumps CRITICAL priority sections.
-    virtual status_t dumpCritical(int /*fd*/, const Vector<String16>& /*args*/) { return OK; }
-
-    // Dumps HIGH priority sections.
-    virtual status_t dumpHigh(int /*fd*/, const Vector<String16>& /*args*/) { return OK; }
-
-    // Dumps normal priority sections.
-    virtual status_t dumpNormal(int /*fd*/, const Vector<String16>& /*args*/) { return OK; }
-
-    // Dumps all sections.
-    // This method is called when priorityDump is called without priority
-    // arguments. By default, it calls all three dump methods.
-    virtual status_t dumpAll(int fd, const Vector<String16>& args);
-    virtual ~PriorityDumper() = default;
-};
-
-} // namespace android
-
-#endif // ANDROID_UTILS_PRIORITYDUMPER_H
diff --git a/services/utils/tests/Android.bp b/services/utils/tests/Android.bp
index 15829fa..5a9dc0a 100644
--- a/services/utils/tests/Android.bp
+++ b/services/utils/tests/Android.bp
@@ -21,6 +21,9 @@
     shared_libs: [
         "libutils",
     ],
+    cflags: [
+        "-Wno-unused-parameter",
+    ],
     static_libs = [
         "libgmock",
         "libserviceutils"
diff --git a/services/utils/tests/PriorityDumper_test.cpp b/services/utils/tests/PriorityDumper_test.cpp
index 79e7340..c5a121e 100644
--- a/services/utils/tests/PriorityDumper_test.cpp
+++ b/services/utils/tests/PriorityDumper_test.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "serviceutils/PriorityDumper.h"
+#include "PriorityDumper.h"
 
 #include <vector>
 
@@ -32,17 +32,17 @@
 
 class PriorityDumperMock : public PriorityDumper {
 public:
-    MOCK_METHOD2(dumpCritical, status_t(int, const Vector<String16>&));
-    MOCK_METHOD2(dumpHigh, status_t(int, const Vector<String16>&));
-    MOCK_METHOD2(dumpNormal, status_t(int, const Vector<String16>&));
-    MOCK_METHOD2(dumpAll, status_t(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpCritical, void(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpHigh, void(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpNormal, void(int, const Vector<String16>&));
+    MOCK_METHOD2(dump, void(int, const Vector<String16>&));
 };
 
 class DumpAllMock : public PriorityDumper {
 public:
-    MOCK_METHOD2(dumpCritical, status_t(int, const Vector<String16>&));
-    MOCK_METHOD2(dumpHigh, status_t(int, const Vector<String16>&));
-    MOCK_METHOD2(dumpNormal, status_t(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpCritical, void(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpHigh, void(int, const Vector<String16>&));
+    MOCK_METHOD2(dumpNormal, void(int, const Vector<String16>&));
 };
 
 class PriorityDumperTest : public Test {
@@ -61,15 +61,15 @@
 
 TEST_F(PriorityDumperTest, noArgsPassed) {
     Vector<String16> args;
-    EXPECT_CALL(dumper_, dumpAll(fd, ElementsAreArray(args)));
-    dumper_.priorityDump(fd, args);
+    EXPECT_CALL(dumper_, dump(fd, ElementsAreArray(args)));
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, noPriorityArgsPassed) {
     Vector<String16> args;
     addAll(args, {"bunch", "of", "args"});
-    EXPECT_CALL(dumper_, dumpAll(fd, ElementsAreArray(args)));
-    dumper_.priorityDump(fd, args);
+    EXPECT_CALL(dumper_, dump(fd, ElementsAreArray(args)));
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, priorityArgsOnly) {
@@ -77,7 +77,8 @@
     addAll(args, {"--dump-priority", "CRITICAL"});
     Vector<String16> strippedArgs;
     EXPECT_CALL(dumper_, dumpCritical(fd, ElementsAreArray(strippedArgs)));
-    dumper_.priorityDump(fd, args);
+
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, dumpCritical) {
@@ -87,7 +88,7 @@
     addAll(strippedArgs, {"args", "left", "behind"});
 
     EXPECT_CALL(dumper_, dumpCritical(fd, ElementsAreArray(strippedArgs)));
-    dumper_.priorityDump(fd, args);
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, dumpHigh) {
@@ -97,7 +98,7 @@
     addAll(strippedArgs, {"args", "left", "behind"});
 
     EXPECT_CALL(dumper_, dumpHigh(fd, ElementsAreArray(strippedArgs)));
-    dumper_.priorityDump(fd, args);
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, dumpNormal) {
@@ -107,7 +108,7 @@
     addAll(strippedArgs, {"args", "left", "behind"});
 
     EXPECT_CALL(dumper_, dumpNormal(fd, ElementsAreArray(strippedArgs)));
-    dumper_.priorityDump(fd, args);
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, dumpAll) {
@@ -118,21 +119,21 @@
     EXPECT_CALL(dumpAlldumper_, dumpHigh(fd, ElementsAreArray(args)));
     EXPECT_CALL(dumpAlldumper_, dumpNormal(fd, ElementsAreArray(args)));
 
-    dumpAlldumper_.priorityDump(fd, args);
+    priorityDump(dumpAlldumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, priorityArgWithPriorityMissing) {
     Vector<String16> args;
     addAll(args, {"--dump-priority"});
-    EXPECT_CALL(dumper_, dumpAll(fd, ElementsAreArray(args)));
+    EXPECT_CALL(dumper_, dump(fd, ElementsAreArray(args)));
 
-    dumper_.priorityDump(fd, args);
+    priorityDump(dumper_, fd, args);
 }
 
 TEST_F(PriorityDumperTest, priorityArgWithInvalidPriority) {
     Vector<String16> args;
     addAll(args, {"--dump-priority", "REALLY_HIGH"});
-    EXPECT_CALL(dumper_, dumpAll(fd, ElementsAreArray(args)));
+    EXPECT_CALL(dumper_, dump(fd, ElementsAreArray(args)));
 
-    dumper_.priorityDump(fd, args);
+    priorityDump(dumper_, fd, args);
 }
\ No newline at end of file
