dynamic services: fix extra sends

Before this change, hwservicemanager sometimes sent out client service
notifications for services which did not currently have known clients.
This is because HidlService always compared the number of clients
reported to the driver w/ '1', representing the service as held by
hwservicemanager. However, in tryUnregister calls and addClientCallback
calls, there are actually two known clients.

So, in this CL, the number of known clients is always piped through from
ServiceManager to HidlService.

Bug: 140310064
Test: hidl_lazy_test
Test: hidl_lazy_test (with hwservicemanager and the test modified to run
    ms rather than every 5s. This allows many more iterations to be
    tested at a time).
Test: hwservicemanager_test
Change-Id: I1d98aef29bf6ccfb5088f525c250874d3f2254f1
(cherry picked from commit f083ee34c8fbd591aa67d3753e51d0aa2fe4df5b)
Merged-In: I1d98aef29bf6ccfb5088f525c250874d3f2254f1
diff --git a/test_lazy.cpp b/test_lazy.cpp
index 21108ba..81ae694 100644
--- a/test_lazy.cpp
+++ b/test_lazy.cpp
@@ -83,12 +83,27 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     setReportedClientCount(1);
 
     for (size_t i = 0; i < 100; i++) {
-        service->handleClientCallbacks(true /*onInterval*/);
+        service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
+    }
+
+    ASSERT_THAT(cb->stream, ElementsAre());
+}
+
+TEST_F(HidlServiceLazyTest, NoChangeWithKnownClients) {
+    sp<RecordingClientCallback> cb = new RecordingClientCallback;
+
+    std::unique_ptr<HidlService> service = makeService();
+    service->addClientCallback(cb, 2 /*knownClients*/);
+
+    setReportedClientCount(2);
+
+    for (size_t i = 0; i < 100; i++) {
+        service->handleClientCallbacks(true /*onInterval*/, 2 /*knownClients*/);
     }
 
     ASSERT_THAT(cb->stream, ElementsAre());
@@ -98,20 +113,20 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     // some other process has the service
     setReportedClientCount(2);
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
 
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
     // just hwservicemanager has the service
     setReportedClientCount(1);
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
 
     ASSERT_THAT(cb->stream, ElementsAre(true));
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
 
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
@@ -120,18 +135,18 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     service->guaranteeClient();
 
     setReportedClientCount(1);
-    service->handleClientCallbacks(false /*onInterval*/);
+    service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
 
@@ -139,23 +154,23 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     // Clients can appear and dissappear as many times as necessary, but they are only considered
     // dropped when the fixed interval stops.
     for (size_t i = 0; i < 100; i++) {
         setReportedClientCount(2);
-        service->handleClientCallbacks(false /*onInterval*/);
+        service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
         setReportedClientCount(1);
-        service->handleClientCallbacks(false /*onInterval*/);
+        service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
     }
 
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
 
@@ -163,22 +178,22 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     setReportedClientCount(2);
-    service->handleClientCallbacks(false /*onInterval*/);
+    service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
     setReportedClientCount(1);
     service->guaranteeClient();
 
-    service->handleClientCallbacks(false /*onInterval*/);
+    service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
 
@@ -186,25 +201,25 @@
     sp<RecordingClientCallback> cb = new RecordingClientCallback;
 
     std::unique_ptr<HidlService> service = makeService();
-    service->addClientCallback(cb);
+    service->addClientCallback(cb, 1 /*knownClients*/);
 
     setReportedClientCount(2);
-    service->handleClientCallbacks(false /*onInterval*/);
+    service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
 
     sp<RecordingClientCallback> laterCb = new RecordingClientCallback;
-    service->addClientCallback(laterCb);
+    service->addClientCallback(laterCb, 1 /*knownClients*/);
 
     ASSERT_THAT(cb->stream, ElementsAre(true));
     ASSERT_THAT(laterCb->stream, ElementsAre(true));
 
     setReportedClientCount(1);
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true));
     ASSERT_THAT(laterCb->stream, ElementsAre(true));
 
-    service->handleClientCallbacks(true /*onInterval*/);
+    service->handleClientCallbacks(true /*onInterval*/, 1 /*knownClients*/);
     ASSERT_THAT(cb->stream, ElementsAre(true, false)); // reported only after two intervals
     ASSERT_THAT(laterCb->stream, ElementsAre(true, false)); // reported only after two intervals
 }
@@ -213,7 +228,7 @@
     std::unique_ptr<HidlService> service = makeService();
 
     setReportedClientCount(2);
-    service->handleClientCallbacks(false /*onInterval*/);
+    service->handleClientCallbacks(false /*onInterval*/, 1 /*knownClients*/);
 
     // kernel API should not be called
     EXPECT_EQ(0u, getNumTimesReported());