Merge "Optimized fread."
diff --git a/tests/Android.mk b/tests/Android.mk
index 38d85f8..3150655 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -212,19 +212,36 @@
 include $(LOCAL_PATH)/Android.build.mk
 
 # -----------------------------------------------------------------------------
+# Library of bionic customized gtest main function.
+# -----------------------------------------------------------------------------
+libBionicGtestMain_src_files := gtest_main.cpp
+
+libBionicGtestMain_cflags := $(test_cflags)
+
+libBionicGtestMain_cppflags := $(test_cppflags)
+
+module := libBionicGtestMain
+module_tag := optional
+build_type := target
+build_target := STATIC_TEST_LIBRARY
+include $(LOCAL_PATH)/Android.build.mk
+build_type := host
+include $(LOCAL_PATH)/Android.build.mk
+
+# -----------------------------------------------------------------------------
 # Tests for the device using bionic's .so. Run with:
 #   adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests32
 #   adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests64
 # -----------------------------------------------------------------------------
 bionic-unit-tests_whole_static_libraries := \
     libBionicTests \
+    libBionicGtestMain \
 
 bionic-unit-tests_static_libraries := \
     libtinyxml2 \
     liblog \
 
 bionic-unit-tests_src_files := \
-    gtest_main.cpp \
     atexit_test.cpp \
     dl_test.cpp \
     dlext_test.cpp \
@@ -268,6 +285,7 @@
 # -----------------------------------------------------------------------------
 bionic-unit-tests-static_whole_static_libraries := \
     libBionicTests \
+    libBionicGtestMain \
 
 bionic-unit-tests-static_static_libraries := \
     libm \
@@ -277,9 +295,6 @@
     libtinyxml2 \
     liblog \
 
-bionic-unit-tests-static_src_files := \
-    gtest_main.cpp \
-
 bionic-unit-tests-static_force_static_executable := true
 
 # libc and libc++ both define std::nothrow. libc's is a private symbol, but this
@@ -302,7 +317,6 @@
 ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
 
 bionic-unit-tests-glibc_src_files := \
-    gtest_main.cpp \
     atexit_test.cpp \
     dlfcn_test.cpp \
     dl_test.cpp \
@@ -315,6 +329,7 @@
 
 bionic-unit-tests-glibc_whole_static_libraries := \
     libBionicStandardTests \
+    libBionicGtestMain \
 
 bionic-unit-tests-glibc_ldlibs := \
     -lrt -ldl -lutil \
diff --git a/tests/gtest_main.cpp b/tests/gtest_main.cpp
index 6c5023b..99cd4ee 100644
--- a/tests/gtest_main.cpp
+++ b/tests/gtest_main.cpp
@@ -319,18 +319,6 @@
   fflush(stdout);
 }
 
-static void TestcaseTimePrint(const TestCase& testcase) {
-  int64_t testcase_time = 0;
-  for (size_t i = 0; i < testcase.TestCount(); ++i) {
-    testcase_time += testcase.GetTestTime(i);
-  }
-  printf("%zu %s from %s (%lld ms total)\n", testcase.TestCount(),
-                                             (testcase.TestCount() == 1) ? "test" : "tests",
-                                             testcase.GetName().c_str(),
-                                             testcase_time / 1000000LL);
-  fflush(stdout);
-}
-
 static void OnTestIterationEndPrint(const std::vector<TestCase>& testcase_list, size_t /*iteration*/,
                                     int64_t elapsed_time) {
 
@@ -364,10 +352,6 @@
     }
   }
 
-  for (auto const& testcase : testcase_list) {
-    TestcaseTimePrint(testcase);
-  }
-
   ColoredPrintf(COLOR_GREEN,  "[==========] ");
   printf("%zu %s from %zu %s ran.", test_count, (test_count == 1) ? "test" : "tests",
                                     testcase_count, (testcase_count == 1) ? "test case" : "test cases");
diff --git a/tests/stdio_ext_test.cpp b/tests/stdio_ext_test.cpp
index 3dbc485..950c7ed 100644
--- a/tests/stdio_ext_test.cpp
+++ b/tests/stdio_ext_test.cpp
@@ -34,7 +34,13 @@
 TEST(stdio_ext, __fbufsize) {
   FILE* fp = fopen("/proc/version", "r");
 
+  // Initially, there's no buffer in case the first thing you do is disable buffering.
+  ASSERT_EQ(0U, __fbufsize(fp));
+
+  // A read forces a buffer to be created.
   char buf[128];
+  fgets(buf, sizeof(buf), fp);
+  ASSERT_EQ(1024U, __fbufsize(fp));
 
   ASSERT_EQ(0, setvbuf(fp, buf, _IOFBF, 1));
   ASSERT_EQ(1U, __fbufsize(fp));