diff --git a/mercurial/revlog.py b/mercurial/revlog.py
index a418c5837bc05ddb3fa720753aa8da6ffeff1102_bWVyY3VyaWFsL3JldmxvZy5weQ==..0ab7f469d386ce50f6ba9f8a11c9bcde5cd2e290_bWVyY3VyaWFsL3JldmxvZy5weQ== 100644
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -446,7 +446,16 @@
 
         t = self.revision(rev, raw=True)
         return len(t)
-    size = rawsize
+
+    def size(self, rev):
+        """length of non-raw text (processed by a "read" flag processor)"""
+        # fast path: if no "read" flag processor could change the content,
+        # size is rawsize. note: ELLIPSIS is known to not change the content.
+        flags = self.flags(rev)
+        if flags & (REVIDX_KNOWN_FLAGS ^ REVIDX_ELLIPSIS) == 0:
+            return self.rawsize(rev)
+
+        return len(self.revision(rev, raw=False))
 
     def chainbase(self, rev):
         base = self._chainbasecache.get(rev)
diff --git a/tests/test-flagprocessor.t b/tests/test-flagprocessor.t
index a418c5837bc05ddb3fa720753aa8da6ffeff1102_dGVzdHMvdGVzdC1mbGFncHJvY2Vzc29yLnQ=..0ab7f469d386ce50f6ba9f8a11c9bcde5cd2e290_dGVzdHMvdGVzdC1mbGFncHJvY2Vzc29yLnQ= 100644
--- a/tests/test-flagprocessor.t
+++ b/tests/test-flagprocessor.t
@@ -244,5 +244,4 @@
 # TEST: hg status
 
   $ hg status
-  M base64
   $ hg diff