DO NOT MERGE: BufferStateLayer: Mirror BufferQueue behavior in fence merging

We have two behavior changes here, lifted directly from ConsumerBase:
	1. Don't overwrite our callback handle fence with an invalid
	fence
	2. If we are going to overwrite a non-null fence with a valid
	one, attempt to merge them

Bug: 171370396
Test: Existing tests pass
Change-Id: Ic295b3ce9814597cd6627eff077988c4578b3f8f
diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h
index 00fa7f7..2430c4e 100644
--- a/services/surfaceflinger/BufferStateLayer.h
+++ b/services/surfaceflinger/BufferStateLayer.h
@@ -120,6 +120,8 @@
     bool updateFrameEventHistory(const sp<Fence>& acquireFence, nsecs_t postedTime,
                                  nsecs_t requestedPresentTime);
 
+    status_t addReleaseFence(const sp<CallbackHandle>& ch, const sp<Fence>& releaseFence);
+
     uint64_t getFrameNumber(nsecs_t expectedPresentTime) const override;
 
     bool getAutoRefresh() const override;