C++11 style fixups

Change-Id: I356d02338820bfef41a9e278c88dafc17cfe1cf9
diff --git a/libs/hwui/FrameInfo.h b/libs/hwui/FrameInfo.h
index 3c31677..65daf03 100644
--- a/libs/hwui/FrameInfo.h
+++ b/libs/hwui/FrameInfo.h
@@ -28,7 +28,7 @@
 
 #define UI_THREAD_FRAME_INFO_SIZE 9
 
-HWUI_ENUM(FrameInfoIndex,
+enum class FrameInfoIndex {
     kFlags = 0,
     kIntendedVsync,
     kVsync,
@@ -47,13 +47,14 @@
 
     // Must be the last value!
     kNumIndexes
-);
+};
 
-HWUI_ENUM(FrameInfoFlags,
+enum class FrameInfoFlags {
     kWindowLayoutChanged = 1 << 0,
     kRTAnimation = 1 << 1,
     kSurfaceCanvas = 1 << 2,
-);
+};
+MAKE_FLAGS_ENUM(FrameInfoFlags)
 
 class ANDROID_API UiFrameInfoBuilder {
 public:
@@ -62,17 +63,21 @@
     }
 
     UiFrameInfoBuilder& setVsync(nsecs_t vsyncTime, nsecs_t intendedVsync) {
-        mBuffer[FrameInfoIndex::kVsync] = vsyncTime;
-        mBuffer[FrameInfoIndex::kIntendedVsync] = intendedVsync;
+        set(FrameInfoIndex::kVsync) = vsyncTime;
+        set(FrameInfoIndex::kIntendedVsync) = intendedVsync;
         return *this;
     }
 
-    UiFrameInfoBuilder& addFlag(FrameInfoFlagsEnum flag) {
-        mBuffer[FrameInfoIndex::kFlags] |= static_cast<uint64_t>(flag);
+    UiFrameInfoBuilder& addFlag(FrameInfoFlags flag) {
+        set(FrameInfoIndex::kFlags) |= static_cast<uint64_t>(flag);
         return *this;
     }
 
 private:
+    inline int64_t& set(FrameInfoIndex index) {
+        return mBuffer[static_cast<int>(index)];
+    }
+
     int64_t* mBuffer;
 };
 
@@ -81,33 +86,37 @@
     void importUiThreadInfo(int64_t* info);
 
     void markSyncStart() {
-        mFrameInfo[FrameInfoIndex::kSyncStart] = systemTime(CLOCK_MONOTONIC);
+        set(FrameInfoIndex::kSyncStart) = systemTime(CLOCK_MONOTONIC);
     }
 
     void markIssueDrawCommandsStart() {
-        mFrameInfo[FrameInfoIndex::kIssueDrawCommandsStart] = systemTime(CLOCK_MONOTONIC);
+        set(FrameInfoIndex::kIssueDrawCommandsStart) = systemTime(CLOCK_MONOTONIC);
     }
 
     void markSwapBuffers() {
-        mFrameInfo[FrameInfoIndex::kSwapBuffers] = systemTime(CLOCK_MONOTONIC);
+        set(FrameInfoIndex::kSwapBuffers) = systemTime(CLOCK_MONOTONIC);
     }
 
     void markFrameCompleted() {
-        mFrameInfo[FrameInfoIndex::kFrameCompleted] = systemTime(CLOCK_MONOTONIC);
+        set(FrameInfoIndex::kFrameCompleted) = systemTime(CLOCK_MONOTONIC);
     }
 
-    int64_t operator[](FrameInfoIndexEnum index) const {
+    int64_t operator[](FrameInfoIndex index) const {
         if (index == FrameInfoIndex::kNumIndexes) return 0;
         return mFrameInfo[static_cast<int>(index)];
     }
 
     int64_t operator[](int index) const {
-        if (index < 0 || index >= FrameInfoIndex::kNumIndexes) return 0;
-        return mFrameInfo[static_cast<int>(index)];
+        if (index < 0 || index >= static_cast<int>(FrameInfoIndex::kNumIndexes)) return 0;
+        return mFrameInfo[index];
     }
 
 private:
-    int64_t mFrameInfo[FrameInfoIndex::kNumIndexes];
+    inline int64_t& set(FrameInfoIndex index) {
+        return mFrameInfo[static_cast<int>(index)];
+    }
+
+    int64_t mFrameInfo[static_cast<int>(FrameInfoIndex::kNumIndexes)];
 };
 
 } /* namespace uirenderer */
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp
index 62cb97c..d0ea3a6 100644
--- a/libs/hwui/JankTracker.cpp
+++ b/libs/hwui/JankTracker.cpp
@@ -30,8 +30,8 @@
 };
 
 struct Comparison {
-    FrameInfoIndexEnum start;
-    FrameInfoIndexEnum end;
+    FrameInfoIndex start;
+    FrameInfoIndex end;
 };
 
 static const Comparison COMPARISONS[] = {
@@ -91,15 +91,15 @@
 }
 
 void JankTracker::addFrame(const FrameInfo& frame) {
-    using namespace FrameInfoIndex;
     mTotalFrameCount++;
     // Fast-path for jank-free frames
-    int64_t totalDuration = frame[kFrameCompleted] - frame[kIntendedVsync];
+    int64_t totalDuration =
+            frame[FrameInfoIndex::kFrameCompleted] - frame[FrameInfoIndex::kIntendedVsync];
     if (CC_LIKELY(totalDuration < mFrameInterval)) {
         return;
     }
 
-    if (frame[kFlags] & EXEMPT_FRAMES_FLAGS) {
+    if (frame[FrameInfoIndex::kFlags] & EXEMPT_FRAMES_FLAGS) {
         return;
     }
 
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index 80c60d9..fcf6eb2 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -399,7 +399,7 @@
             continue;
         }
         fprintf(file, "\n");
-        for (int i = 0; i < FrameInfoIndex::kNumIndexes; i++) {
+        for (int i = 0; i < static_cast<int>(FrameInfoIndex::kNumIndexes); i++) {
             fprintf(file, "%" PRId64 ",", frame[i]);
         }
     }
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index 679a00f..f48ee41 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -114,7 +114,8 @@
 
 bool DrawFrameTask::syncFrameState(TreeInfo& info) {
     ATRACE_CALL();
-    mRenderThread->timeLord().vsyncReceived(mFrameInfo[FrameInfoIndex::kVsync]);
+    int64_t vsync = mFrameInfo[static_cast<int>(FrameInfoIndex::kVsync)];
+    mRenderThread->timeLord().vsyncReceived(vsync);
     mContext->makeCurrent();
     Caches::getInstance().textureCache.resetMarkInUse();
 
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
index 3a31db0..0fa2f23 100644
--- a/libs/hwui/renderthread/RenderProxy.cpp
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -52,10 +52,11 @@
     MethodInvokeRenderTask* task = new MethodInvokeRenderTask((RunnableMethod) Bridge_ ## method); \
     ARGS(method) *args = (ARGS(method) *) task->payload()
 
-HWUI_ENUM(DumpFlags,
+enum class DumpFlags {
         kFrameStats = 1 << 0,
         kReset      = 1 << 1,
-);
+};
+MAKE_FLAGS_ENUM(DumpFlags)
 
 CREATE_BRIDGE4(createContext, RenderThread* thread, bool translucent,
         RenderNode* rootRenderNode, IContextFactory* contextFactory) {
diff --git a/libs/hwui/utils/Macros.h b/libs/hwui/utils/Macros.h
index b93f720..49d364e7 100644
--- a/libs/hwui/utils/Macros.h
+++ b/libs/hwui/utils/Macros.h
@@ -35,12 +35,12 @@
         static_assert(std::is_standard_layout<Type>::value, \
         #Type " must have standard layout")
 
-#define HWUI_ENUM(name, ...) \
-    namespace name { \
-        enum _##name { \
-            __VA_ARGS__ \
-        }; \
-    } \
-    typedef enum name::_##name name##Enum
+#define MAKE_FLAGS_ENUM(enumType) \
+        inline int operator|(enumType lhs, enumType rhs) { \
+            return static_cast<int>(lhs) | static_cast<int>(rhs); \
+        } \
+        inline int operator&(int lhs, enumType rhs) { \
+            return lhs & static_cast<int>(rhs); \
+        }
 
 #endif /* MACROS_H */