fix wrong time offset adjustment

- Always picking the closest bigger time for getting delta can go wrong
  if time changes in the middle.
- If the close bigger time is giving negative time, use the one right
  before it instead.

bug: 33210752
Test: python packages/services/Car/tools/bootanalyze/bootanalyze.py -r -c packages/services/Car/tools/bootanalyze/config.yaml -n 10
Change-Id: Ice44e4839aa9e8d5222e8aa73eb2f7b4329d4757
diff --git a/tools/bootanalyze/bootanalyze.py b/tools/bootanalyze/bootanalyze.py
index e66bbcf..4cc23886 100755
--- a/tools/bootanalyze/bootanalyze.py
+++ b/tools/bootanalyze/bootanalyze.py
@@ -215,14 +215,19 @@
     else:
       events_to_correct.append(k)
 
+  diff_prev = diffs[0]
   for k in events_to_correct:
     diff = diffs[0]
     while diff[0] < events[k] and len(diffs) > 1:
       diffs.pop(0)
+      diff_prev = diff
       diff = diffs[0]
     events[k] = events[k] - diff[1]
     if events[k] < 0.0:
-        events[k] = 0.0
+        if events[k] < -0.1: # maybe previous one is better fit
+          events[k] = events[k] + diff[1] - diff_prev[1]
+        else:
+          events[k] = 0.0
 
   data_points = {}
   timing_points = collections.OrderedDict()