def test_multiple_fonts(self): self.session.page_view({ "Roboto-Regular.ttf": u([1, 2, 3]), "NotoSansJP-Regular.otf": u([3, 4]), }) self.session.page_view({ "Roboto-Regular.ttf": u([3, 4, 5]), }) self.session.page_view({ "NotoSansJP-Regular.otf": u([1]), }) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 3) self.assertTrue( request_graph.graph_has_independent_requests( graphs[0], [ (0, 3000), (0, 2000), ])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[1], [ (0, 2000), ])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[2], [ (0, 1000), ]))
def test_multiple_pageviews(self): self.session.page_view({"Roboto-Regular.ttf": u([1, 2, 3])}) self.session.page_view({"Roboto-Regular.ttf": u([4, 5])}) self.session.page_view({"Roboto-Regular.ttf": u([1, 2, 3])}) self.session.page_view({"Roboto-Regular.ttf": u([1, 8])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 4) self.assertTrue( request_graph.graph_has_independent_requests( graphs[0], [ (0, 3000), ])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[1], [ (0, 2000), ])) self.assertTrue( request_graph.graph_has_independent_requests(graphs[2], [])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[3], [ (0, 1000), ]))
def test_multiple_fonts_caches_subsets(self): self.session.page_view({ "Roboto-Regular.ttf": u([0x61, 0x62]), }) self.session.page_view({ "NotoSansJP-Regular.otf": u([0x61, 0x62]), }) self.session.page_view({ "Roboto-Regular.ttf": u([0x63]), "NotoSansJP-Regular.otf": u([0x63]), }) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 3) self.assertTrue( request_graph.graph_has_independent_requests( graphs[0], [ (35, 1035), ])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[1], [ (35, 1035), ])) self.assertTrue( request_graph.graph_has_independent_requests(graphs[2], []))
def test_single_file_loads_only_once(self): self.session.page_view({"Roboto-Regular.ttf": u([0x61, 0x62])}) self.session.page_view({"Roboto-Regular.ttf": u([0x63, 0x64])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 2) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (35, 35 + ROBOTO_REGULAR_WOFF2_SIZE), ])) self.assertTrue(request_graph.graph_has_independent_requests(graphs[1], []))
def test_graph_has_independent_requests(self): r_1 = request_graph.Request(1, 2) r_2 = request_graph.Request(3, 4) r_3 = request_graph.Request(5, 6) graph = request_graph.RequestGraph({r_1, r_2, r_3}) self.assertTrue( request_graph.graph_has_independent_requests(graph, [(3, 4), (1, 2), (5, 6)])) self.assertFalse( request_graph.graph_has_independent_requests(graph, [(3, 5), (1, 2), (5, 6)]))
def test_no_requests(self): page_view = page_view_sequence_pb2.PageViewProto() page_view.contents.add() self.session.page_view_proto(page_view) self.session.page_view_proto(page_view) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 2) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [])) self.assertTrue( request_graph.graph_has_independent_requests(graphs[1], []))
def test_subsequent_subset_smaller(self): session = optimal_pfe_method.start_session( None, font_loader.FontLoader("./patch_subset/testdata/"), InverseMockSubsetSizer()) session.page_view({"Roboto-Regular.ttf": u([1, 2, 3])}) session.page_view({"Roboto-Regular.ttf": u([4, 5])}) graphs = session.get_request_graphs() self.assertEqual(len(graphs), 2) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (0, 1000), ])) self.assertTrue(request_graph.graph_has_independent_requests(graphs[1], []))
def test_single_font_no_subsets(self): self.session.page_view({"Roboto-Regular.ttf": u([12345])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], []))
def test_ignores_no_codepoint_font(self): self.session.page_view({"Roboto-Regular.ttf": u([])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], []))
def test_single_font_caches_subsets(self): self.session.page_view({"Roboto-Regular.ttf": u([0x61, 0x62, 0x0474])}) self.session.page_view({"Roboto-Regular.ttf": u([0x63, 0x0475])}) self.session.page_view({"Roboto-Regular.ttf": u([0x040E])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 3) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (35, 1035), (35, 1035), ])) self.assertTrue(request_graph.graph_has_independent_requests(graphs[1], [])) self.assertTrue( request_graph.graph_has_independent_requests(graphs[2], [ (35, 1035), ]))
def test_one_page_view(self): self.session.page_view({"Roboto-Regular.ttf": u([1, 2, 3])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (0, 3000), ]))
def test_single_font_one_subset(self): self.session.page_view({"Roboto-Regular.ttf": u([0x61, 0x62])}) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (35, 1035), ]))
def test_single_requests(self): page_view = page_view_sequence_pb2.PageViewProto() content = page_view.contents.add() logged_request = content.logged_requests.add() logged_request.request_size = 123 logged_request.response_size = 456 self.session.page_view_proto(page_view) self.session.page_view_proto(page_view) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 2) self.assertTrue( request_graph.graph_has_independent_requests( graphs[0], [(123, 456)])) self.assertTrue( request_graph.graph_has_independent_requests( graphs[1], [(123, 456)]))
def test_parallel_file_loads(self): self.session.page_view({ "Roboto-Regular.ttf": u([0x61, 0x62]), "Roboto-Thin.ttf": u([0x61, 0x62]), }) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (35, 35 + ROBOTO_REGULAR_WOFF2_SIZE), (35, 35 + ROBOTO_THIN_WOFF2_SIZE), ]))
def test_cached_file_load(self): session = whole_font_pfe_method.start_session( None, font_loader.FontLoader("./patch_subset/testdata/")) session.page_view({"Roboto-Regular.ttf": u([0x61, 0x62])}) session = whole_font_pfe_method.start_session( None, font_loader.FontLoader("./patch_subset/testdata/")) session.page_view({"Roboto-Regular.ttf": u([0x63, 0x64])}) graphs = session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests(graphs[0], [ (35, 35 + ROBOTO_REGULAR_WOFF2_SIZE), ]))
def test_multiple_chained_requests(self): page_view = page_view_sequence_pb2.PageViewProto() content = page_view.contents.add() logged_request = content.logged_requests.add() logged_request.request_size = 12 logged_request.response_size = 34 content = page_view.contents.add() logged_request = content.logged_requests.add() logged_request.request_size = 56 logged_request.response_size = 78 self.session.page_view_proto(page_view) graphs = self.session.get_request_graphs() self.assertEqual(len(graphs), 1) self.assertTrue( request_graph.graph_has_independent_requests( graphs[0], [(12, 34), (56, 78)]))
def test_graph_has_independent_requests_empty(self): graph = request_graph.RequestGraph(set()) self.assertTrue(request_graph.graph_has_independent_requests(graph, [])) self.assertFalse( request_graph.graph_has_independent_requests(graph, [(1, 2)]))