Don't let rounding prematurely influence document size when printing

Don't round away subpixel values when they can still make a difference to the
size of the document. We convert back and forth between different DPIs so we
can lose a pixel or two along the way if we don't retain subpixel values to
the end.

BUG=467579

Review-Url: https://codereview.chromium.org/2116283002
Cr-Commit-Position: refs/heads/master@{#409469}
diff --git a/printing/units_unittest.cc b/printing/units_unittest.cc
index fe160b3f..da3b3ce9 100644
--- a/printing/units_unittest.cc
+++ b/printing/units_unittest.cc
@@ -31,10 +31,19 @@
   EXPECT_EQ(-10, ConvertUnit(-1049, 1000, 10));
   EXPECT_EQ(-11, ConvertUnit(-1050, 1000, 10));
 
+  EXPECT_EQ(99920, ConvertUnit(999.2, 10, 1000));
+  EXPECT_EQ(-94920, ConvertUnit(-949.2, 10, 1000));
+  EXPECT_EQ(99970, ConvertUnit(999.7, 10, 1000));
+  EXPECT_EQ(-94970, ConvertUnit(-949.7, 10, 1000));
+
+  EXPECT_EQ(3996, ConvertUnit(999.1, 75, 300));
+  EXPECT_EQ(3997, ConvertUnit(999.3, 75, 300));
+  EXPECT_EQ(3998, ConvertUnit(999.5, 75, 300));
+  EXPECT_EQ(3999, ConvertUnit(999.7, 75, 300));
+  EXPECT_EQ(4000, ConvertUnit(999.9, 75, 300));
+
   EXPECT_EQ(0, ConvertUnit(2, 1000000000, 1));
   EXPECT_EQ(2000000000, ConvertUnit(2, 1, 1000000000));
-  EXPECT_EQ(4000000000U,
-            static_cast<unsigned int>(ConvertUnit(2, 1, 2000000000)));
 
   EXPECT_EQ(100, ConvertUnitDouble(100, 100, 100));
   EXPECT_EQ(-100, ConvertUnitDouble(-100, 100, 100));