diff --git a/drmcomposition.cpp b/drmcomposition.cpp
index 3612972..864c5e5 100644
--- a/drmcomposition.cpp
+++ b/drmcomposition.cpp
@@ -45,7 +45,7 @@
   }
 }
 
-int DrmComposition::Init() {
+int DrmComposition::Init(uint64_t frame_no) {
   for (DrmResources::ConnectorIter iter = drm_->begin_connectors();
        iter != drm_->end_connectors(); ++iter) {
     int display = (*iter)->display();
@@ -58,7 +58,8 @@
     // If the display hasn't been modeset yet, this will be NULL
     DrmCrtc *crtc = drm_->GetCrtcForDisplay(display);
 
-    int ret = composition_map_[(*iter)->display()]->Init(drm_, crtc, importer_);
+    int ret = composition_map_[(*iter)->display()]->Init(drm_, crtc, importer_,
+                                                         frame_no);
     if (ret) {
       ALOGE("Failed to init display composition for %d", (*iter)->display());
       return ret;
diff --git a/drmcomposition.h b/drmcomposition.h
index ee2e258..426ced0 100644
--- a/drmcomposition.h
+++ b/drmcomposition.h
@@ -42,7 +42,7 @@
  public:
   DrmComposition(DrmResources *drm, Importer *importer);
 
-  int Init();
+  int Init(uint64_t frame_no);
 
   int SetLayers(size_t num_displays,
                 const DrmCompositionDisplayLayersMap *maps);
diff --git a/drmcompositor.cpp b/drmcompositor.cpp
index c61e60c..ad4cf88 100644
--- a/drmcompositor.cpp
+++ b/drmcompositor.cpp
@@ -27,7 +27,7 @@
 
 namespace android {
 
-DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm) {
+DrmCompositor::DrmCompositor(DrmResources *drm) : drm_(drm), frame_no_(0) {
 }
 
 DrmCompositor::~DrmCompositor() {
@@ -53,7 +53,7 @@
     ALOGE("Failed to allocate drm composition");
     return NULL;
   }
-  int ret = composition->Init();
+  int ret = composition->Init(++frame_no_);
   if (ret) {
     ALOGE("Failed to initialize drm composition %d", ret);
     delete composition;
diff --git a/drmcompositor.h b/drmcompositor.h
index 3fc2bb1..0741932 100644
--- a/drmcompositor.h
+++ b/drmcompositor.h
@@ -45,6 +45,8 @@
 
   DrmResources *drm_;
 
+  uint64_t frame_no_;
+
   // mutable for Dump() propagation
   mutable std::map<int, DrmDisplayCompositor> compositor_map_;
 };
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index 465a318..c1848e0 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -74,7 +74,8 @@
       timeline_current_(0),
       timeline_pre_comp_done_(0),
       pre_composition_layer_index_(-1),
-      dpms_mode_(DRM_MODE_DPMS_ON) {
+      dpms_mode_(DRM_MODE_DPMS_ON),
+      frame_no_(0) {
 }
 
 DrmDisplayComposition::~DrmDisplayComposition() {
@@ -100,10 +101,11 @@
 }
 
 int DrmDisplayComposition::Init(DrmResources *drm, DrmCrtc *crtc,
-                                Importer *importer) {
+                                Importer *importer, uint64_t frame_no) {
   drm_ = drm;
   crtc_ = crtc; // Can be NULL if we haven't modeset yet
   importer_ = importer;
+  frame_no_ = frame_no;
 
   int ret = hw_get_module(GRALLOC_HARDWARE_MODULE_ID,
                           (const hw_module_t **)&gralloc_);
@@ -372,6 +374,10 @@
   return dpms_mode_;
 }
 
+uint64_t DrmDisplayComposition::frame_no() const {
+  return frame_no_;
+}
+
 Importer *DrmDisplayComposition::importer() const {
   return importer_;
 }
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index 4d4f2df..be4ecef 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -53,7 +53,8 @@
   DrmDisplayComposition();
   ~DrmDisplayComposition();
 
-  int Init(DrmResources *drm, DrmCrtc *crtc, Importer *importer);
+  int Init(DrmResources *drm, DrmCrtc *crtc, Importer *importer,
+           uint64_t frame_no);
 
   DrmCompositionType type() const;
 
@@ -71,6 +72,8 @@
   int pre_composition_layer_index() const;
   uint32_t dpms_mode() const;
 
+  uint64_t frame_no() const;
+
   Importer *importer() const;
 
  private:
@@ -97,6 +100,8 @@
   DrmCompositionLayerVector_t layers_;
   int pre_composition_layer_index_;
   uint32_t dpms_mode_;
+
+  uint64_t frame_no_;
 };
 }
 
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 9130085..c923526 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -41,7 +41,6 @@
     : drm_(NULL),
       display_(-1),
       worker_(this),
-      frame_no_(0),
       initialized_(false),
       active_(false),
       framebuffer_index_(0),
diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h
index 46d71ae..50109b3 100644
--- a/drmdisplaycompositor.h
+++ b/drmdisplaycompositor.h
@@ -63,8 +63,6 @@
   std::queue<std::unique_ptr<DrmDisplayComposition>> composite_queue_;
   std::unique_ptr<DrmDisplayComposition> active_composition_;
 
-  uint64_t frame_no_;
-
   bool initialized_;
   bool active_;
 
