Exemplo n.º 1
0
 def setUp(self):
   self.session = patch_subset_method.create_without_codepoint_remapping(
   ).start_session(None, font_loader.FontLoader("./patch_subset/testdata/"))
   self.session_with_remapping = patch_subset_method.create_with_codepoint_remapping(
   ).start_session(None, font_loader.FontLoader("./patch_subset/testdata/"))
   self.session_with_prediction = patch_subset_method.create_with_codepoint_prediction(
       50,
       0.0).start_session(None, font_loader.FontLoader("./patch_subset/testdata/"))
  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),
        ]))
Exemplo n.º 3
0
    def test_read_font(self):
        with tempfile.TemporaryDirectory() as the_dir:
            font_id = 'test.ttf'
            font_contents = 'font-bytes-go-here'
            with open(the_dir + '/' + font_id, 'w') as tmp_file:
                tmp_file.write(font_contents)

            the_bytes = font_loader.FontLoader(the_dir).load_font(font_id)

            self.assertEqual(str(the_bytes, encoding='UTF-8'), font_contents)
 def setUp(self):
   flags.FLAGS(["auto-settings", "False"])
   self.latin_method = combined_patch_subset_method.CombinedPatchSubsetMethod(
       "latin")
   self.arabic_indic_method = combined_patch_subset_method.CombinedPatchSubsetMethod(
       "arabic_indic")
   self.cjk_method = combined_patch_subset_method.CombinedPatchSubsetMethod(
       "cjk")
   self.unknown_method = combined_patch_subset_method.CombinedPatchSubsetMethod(
       "invalid")
   self.font_loader = font_loader.FontLoader("./patch_subset/testdata/")
Exemplo n.º 5
0
 def test_simulate_logged(self):
     a_font_loader = font_loader.FontLoader("fonts/are/here")
     self.assertEqual(
         simulation.simulate_sequence(
             self.page_view_sequence, self.mock_logged_pfe_method,
             simulation.NetworkModel("slow", 0, 10, 10), a_font_loader),
         [self.graph_1])
     self.mock_logged_pfe_method.start_session.assert_called_once_with(
         simulation.NetworkModel("slow", 0, 10, 10), a_font_loader)
     self.mock_logged_pfe_session.page_view_proto.assert_has_calls(
         [mock.call(page_view) for page_view in self.page_view_sequence])
     self.mock_logged_pfe_session.get_request_graphs.assert_called_once_with(
     )
Exemplo n.º 6
0
def simulate_all(sequences,
                 pfe_methods,
                 network_models,
                 font_directory,
                 default_font_id=None):
    """Simulate the matrix of {sequences} x {pfe_methods} x {network_models}.

  For each element compute a set of summary metrics, total time, total
  request bytes sent, and total response bytes sent.
  """

    a_font_loader = font_loader.FontLoader(font_directory, default_font_id)
    failed_indices = []
    results_by_method = collections.defaultdict(
        lambda: collections.defaultdict(list))

    idx = 0
    for sequence in sequences:

        sequence_results = collections.defaultdict(
            lambda: collections.defaultdict(list))

        try:
            for method in pfe_methods:

                if not is_network_sensitive(method):
                    graphs = simulate_sequence(sequence.page_views, method,
                                               None, a_font_loader)

                network_results = sequence_results[method.name()]
                for network_model in network_models:
                    if is_network_sensitive(method):
                        graphs = simulate_sequence(sequence.page_views, method,
                                                   network_model,
                                                   a_font_loader)

                    network_results[network_model.name].append(
                        SequenceTotals(
                            totals_for_network(graphs, network_model),
                            sequence.id))

            merge_results_by_method(sequence_results, results_by_method)

        except Exception:  # pylint: disable=broad-except
            LOG.exception(
                "Failure during sequence simulation. Dropping sequence from results."
            )
            failed_indices.append(idx)
        idx += 1

    return SimulationResults(dict(results_by_method), failed_indices)
Exemplo n.º 7
0
  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], []))
Exemplo n.º 8
0
 def test_simulate(self):
     a_font_loader = font_loader.FontLoader("fonts/are/here")
     self.assertEqual(
         simulation.simulate_sequence(
             self.page_view_sequence, self.mock_pfe_method,
             simulation.NetworkModel("slow", 0, 10, 10), a_font_loader),
         [self.graph_1])
     self.mock_pfe_method.start_session.assert_called_once_with(
         simulation.NetworkModel("slow", 0, 10, 10), a_font_loader)
     usage = namedtuple("Usage", ["codepoints", "glyph_ids"])
     self.mock_pfe_session.page_view.assert_has_calls([
         mock.call({
             "roboto": usage({1, 2, 3}, set()),
             "open_sans": usage({4, 5, 6}, set()),
         }),
         mock.call({
             "roboto": usage({7, 8, 9}, set()),
         }),
         mock.call({"open_sans": usage({10, 11, 12}, set())})
     ])
     self.mock_pfe_session.get_request_graphs.assert_called_once_with()
Exemplo n.º 9
0
def simulate_all(sequences,
                 pfe_methods,
                 network_models,
                 font_directory,
                 default_font_id=None):
    """Simulate the matrix of {sequences} x {pfe_methods} x {network_models}.

  For each element compute a set of summary metrics, total time, total
  request bytes sent, and total response bytes sent.
  """
    a_font_loader = font_loader.FontLoader(font_directory, default_font_id)
    result = dict()
    for method in pfe_methods:
        model_totals = dict()
        if hasattr(method, "network_sensitive") and callable(
                method.network_sensitive) and method.network_sensitive():
            for network_model in network_models:
                totals = []
                for sequence in sequences:
                    graphs = simulate_sequence(sequence, method, network_model,
                                               a_font_loader)
                    totals.extend(totals_for_network(graphs, network_model))
                model_totals[network_model.name] = totals
        else:
            graph_collection = []
            for sequence in sequences:
                graphs = simulate_sequence(sequence, method, None,
                                           a_font_loader)
                graph_collection.append(graphs)
            for network_model in network_models:
                totals = []
                for graphs in graph_collection:
                    totals.extend(totals_for_network(graphs, network_model))
                model_totals[network_model.name] = totals
        result[method.name()] = model_totals
    return result
 def setUp(self):
     self.session = range_request_pfe_method.start_session(
         None, font_loader.FontLoader("./patch_subset/testdata/"), 10)
 def setUp(self):
     self.session = whole_font_pfe_method.start_session(
         None, font_loader.FontLoader("./patch_subset/testdata/"))
 def setUp(self):
   self.session = optimal_one_font_method.start_session(None,
       font_loader.FontLoader("./patch_subset/testdata/"), MockSubsetSizer())
Exemplo n.º 13
0
 def setUp(self):
     self.session = unicode_range_pfe_method.start_session(
         None, font_loader.FontLoader("./patch_subset/testdata/"),
         MockSubsetSizer())