shill: DHCPClient: Output status metrics

Output metrics about the DHCP client status whenever this state
changes.  This will allow us track aggregate activity so we can
track the efficacy of the various DHCP client features.

BUG=chromium:384897
TEST=Unit tests + manual: restart shill and browse to chrome://histograms

Change-Id: I8e9628243c8b9b6e8bd0270e86795737a2f75846
Reviewed-on: https://chromium-review.googlesource.com/208825
Reviewed-by: Peter Qiu <zqiu@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcp_provider.cc b/dhcp_provider.cc
index 256bf1c..decedec 100644
--- a/dhcp_provider.cc
+++ b/dhcp_provider.cc
@@ -29,7 +29,8 @@
       root_("/"),
       control_interface_(NULL),
       dispatcher_(NULL),
-      glib_(NULL) {
+      glib_(NULL),
+      metrics_(NULL) {
   SLOG(DHCP, 2) << __func__;
 }
 
@@ -43,12 +44,14 @@
 
 void DHCPProvider::Init(ControlInterface *control_interface,
                         EventDispatcher *dispatcher,
-                        GLib *glib) {
+                        GLib *glib,
+                        Metrics *metrics) {
   SLOG(DHCP, 2) << __func__;
   listener_.reset(new DHCPCDListener(proxy_factory_->connection(), this));
   glib_ = glib;
   control_interface_ = control_interface;
   dispatcher_ = dispatcher;
+  metrics_ = metrics;
 }
 
 DHCPConfigRefPtr DHCPProvider::CreateConfig(const string &device_name,
@@ -63,7 +66,8 @@
                         host_name,
                         lease_file_suffix,
                         arp_gateway,
-                        glib_);
+                        glib_,
+                        metrics_);
 }
 
 DHCPConfigRefPtr DHCPProvider::GetConfig(int pid) {