Home / Function/ fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() — netty Function Reference

fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() — netty Function Reference

Architecture documentation for the fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() function in WeightedFairQueueByteDistributorDependencyTreeTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  60aa764a_c5b7_3fcc_4f08_647f77b7de6a["fireFoxQoSStreamsRemainAfterDataStreamsAreClosed()"]
  f59fdba5_c411_919e_8d09_ef11c6679e0d["WeightedFairQueueByteDistributorDependencyTreeTest"]
  60aa764a_c5b7_3fcc_4f08_647f77b7de6a -->|defined in| f59fdba5_c411_919e_8d09_ef11c6679e0d
  57fc268f_ff1d_75b5_06df_6fd94e9fd09c["setup()"]
  60aa764a_c5b7_3fcc_4f08_647f77b7de6a -->|calls| 57fc268f_ff1d_75b5_06df_6fd94e9fd09c
  9bb14600_992d_861f_4dbc_b1c448deadfa["verifyFireFoxQoSStreams()"]
  60aa764a_c5b7_3fcc_4f08_647f77b7de6a -->|calls| 9bb14600_992d_861f_4dbc_b1c448deadfa
  style 60aa764a_c5b7_3fcc_4f08_647f77b7de6a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http2/src/test/java/io/netty/handler/codec/http2/WeightedFairQueueByteDistributorDependencyTreeTest.java lines 176–247

    @Test
    public void fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() throws Http2Exception {
        // https://bitsup.blogspot.com/2015/01/http2-dependency-priorities-in-firefox.html
        setup(5);

        setPriority(leadersId, connection.connectionStream().id(), leadersWeight, false);
        setPriority(unblockedId, connection.connectionStream().id(), unblockedWeight, false);
        setPriority(backgroundId, connection.connectionStream().id(), backgroundWeight, false);
        setPriority(speculativeId, backgroundId, speculativeWeight, false);
        setPriority(followersId, leadersId, followersWeight, false);

        verifyFireFoxQoSStreams();

        // Simulate a HTML request
        short htmlGetStreamWeight = 2;
        Http2Stream htmlGetStream = connection.local().createStream(13, false);
        setPriority(htmlGetStream.id(), followersId, htmlGetStreamWeight, false);
        Http2Stream favIconStream = connection.local().createStream(15, false);
        setPriority(favIconStream.id(), connection.connectionStream().id(), DEFAULT_PRIORITY_WEIGHT, false);
        Http2Stream cssStream = connection.local().createStream(17, false);
        setPriority(cssStream.id(), leadersId, DEFAULT_PRIORITY_WEIGHT, false);
        Http2Stream jsStream = connection.local().createStream(19, false);
        setPriority(jsStream.id(), leadersId, DEFAULT_PRIORITY_WEIGHT, false);
        Http2Stream imageStream = connection.local().createStream(21, false);
        setPriority(imageStream.id(), followersId, 1, false);

        // Level 0
        assertEquals(4, distributor.numChildren(connection.connectionStream().id()));

        // Level 1
        assertTrue(distributor.isChild(leadersId, connection.connectionStream().id(), leadersWeight));
        assertEquals(3, distributor.numChildren(leadersId));

        assertTrue(distributor.isChild(unblockedId, connection.connectionStream().id(), unblockedWeight));
        assertEquals(0, distributor.numChildren(unblockedId));

        assertTrue(distributor.isChild(backgroundId, connection.connectionStream().id(), backgroundWeight));
        assertEquals(1, distributor.numChildren(backgroundId));

        assertTrue(distributor.isChild(favIconStream.id(), connection.connectionStream().id(),
                                       DEFAULT_PRIORITY_WEIGHT));
        assertEquals(0, distributor.numChildren(favIconStream.id()));

        // Level 2
        assertTrue(distributor.isChild(followersId, leadersId, followersWeight));
        assertEquals(2, distributor.numChildren(followersId));

        assertTrue(distributor.isChild(speculativeId, backgroundId, speculativeWeight));
        assertEquals(0, distributor.numChildren(speculativeId));

        assertTrue(distributor.isChild(cssStream.id(), leadersId, DEFAULT_PRIORITY_WEIGHT));
        assertEquals(0, distributor.numChildren(cssStream.id()));

        assertTrue(distributor.isChild(jsStream.id(), leadersId, DEFAULT_PRIORITY_WEIGHT));
        assertEquals(0, distributor.numChildren(jsStream.id()));

        // Level 3
        assertTrue(distributor.isChild(htmlGetStream.id(), followersId, htmlGetStreamWeight));
        assertEquals(0, distributor.numChildren(htmlGetStream.id()));

        assertTrue(distributor.isChild(imageStream.id(), followersId, followersWeight));
        assertEquals(0, distributor.numChildren(imageStream.id()));

        // Close all the data streams and ensure the "priority only streams" are retained in the dependency tree.
        htmlGetStream.close();
        favIconStream.close();
        cssStream.close();
        jsStream.close();
        imageStream.close();

        verifyFireFoxQoSStreams();
    }

Domain

Subdomains

Frequently Asked Questions

What does fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() do?
fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() is a function in the netty codebase, defined in codec-http2/src/test/java/io/netty/handler/codec/http2/WeightedFairQueueByteDistributorDependencyTreeTest.java.
Where is fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() defined?
fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() is defined in codec-http2/src/test/java/io/netty/handler/codec/http2/WeightedFairQueueByteDistributorDependencyTreeTest.java at line 176.
What does fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() call?
fireFoxQoSStreamsRemainAfterDataStreamsAreClosed() calls 2 function(s): setup, verifyFireFoxQoSStreams.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free