buffet: Fix issues in StateChangeQueue

Addressed additional code review issues brought after the original
code has been published.

- NotifyPropertiesUpdated() now takes timestamp and property set
  as separate parameters to simplify implementation of StateManager.
- StateChangeQueue::max_queue_size_ is made 'const'
- StateChangeQueue now maintains a time-to-event map instead of
  a vector of StateChange. This allows to keep the events sorted
  by time stamp. Also adding discrete events with the same time stamp
  coalesces the property changes.
- added a unit test for coalescing property set changes based on
  the timestamp.

BUG=None
TEST=FEATURES=test emerge-link buffet

Change-Id: I309816d1f040558620fa68a844b05251d0e4319b
Reviewed-on: https://chromium-review.googlesource.com/226300
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/states/state_manager.h b/buffet/states/state_manager.h
index f17e8a6..53695e2 100644
--- a/buffet/states/state_manager.h
+++ b/buffet/states/state_manager.h
@@ -21,6 +21,7 @@
 namespace base {
 class DictionaryValue;
 class FilePath;
+class Time;
 }  // namespace base
 
 namespace buffet {
@@ -45,11 +46,7 @@
   // name of the property to update in format "package.property".
   bool SetPropertyValue(const std::string& full_property_name,
                         const chromeos::Any& value,
-                        chromeos::ErrorPtr* error);
-
-  // Updates a number of state properties in one shot.
-  // |property_set| is a (full_property_name)-to-(property_value) map.
-  bool UpdateProperties(const chromeos::VariantDictionary& property_set,
+                        const base::Time& timestamp,
                         chromeos::ErrorPtr* error);
 
   // Returns all the categories the state properties are registered from.
@@ -64,11 +61,6 @@
   std::vector<StateChange> GetAndClearRecordedStateChanges();
 
  private:
-  // Helper method to be used with SetPropertyValue() and UpdateProperties()
-  bool UpdatePropertyValue(const std::string& full_property_name,
-                           const chromeos::Any& value,
-                           chromeos::ErrorPtr* error);
-
   // Loads a device state fragment from a JSON object. |category| represents
   // a device daemon providing the state fragment or empty string for the
   // base state fragment.