/* * Test that if we change the RGB quantization property to a different * value, we trigger a mode change on the connector's CRTC, which will * in turn disable/enable the connector.
*/ staticvoid drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *old_conn_state; struct drm_connector_state *new_conn_state; struct drm_crtc_state *crtc_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if we set the RGB quantization property to the same value, * we don't trigger a mode change on the connector's CRTC and leave the * connector unaffected.
*/ staticvoid drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *old_conn_state; struct drm_connector_state *new_conn_state; struct drm_crtc_state *crtc_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to auto with a mode that isn't the * VIC-1 mode, we will get a limited RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to auto with a VIC-1 mode, we will get * a full RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *mode; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to full with a mode that isn't the * VIC-1 mode, we will get a full RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_full_cea_mode(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to full with a VIC-1 mode, we will get * a full RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_full_cea_mode_vic_1(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *mode; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to limited with a mode that isn't the * VIC-1 mode, we will get a limited RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_limited_cea_mode(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, if the * Broadcast RGB property is set to limited with a VIC-1 mode, we will * get a limited RGB Quantization Range.
*/ staticvoid drm_test_check_broadcast_rgb_limited_cea_mode_vic_1(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *mode; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that for an HDMI connector, with an HDMI monitor, we will * get a limited RGB Quantization Range with a YUV420 mode, no * matter what the value of the Broadcast RGB property is set to.
*/ staticvoid drm_test_check_broadcast_rgb_cea_mode_yuv420(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; enum drm_hdmi_broadcast_rgb broadcast_rgb; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_atomic_state *state; struct drm_display_mode *mode; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
retry_conn_enable:
ret = drm_kunit_helper_enable_crtc_connector(test, drm, crtc, conn,
mode, &ctx); if (ret == -EDEADLK) {
ret = drm_modeset_backoff(&ctx); if (!ret) goto retry_conn_enable;
}
KUNIT_ASSERT_EQ(test, ret, 0);
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
retry_conn_state:
conn_state = drm_atomic_get_connector_state(state, conn); if (PTR_ERR(conn_state) == -EDEADLK) {
drm_atomic_state_clear(state);
ret = drm_modeset_backoff(&ctx); if (!ret) goto retry_conn_state;
}
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
conn_state->hdmi.broadcast_rgb = broadcast_rgb;
ret = drm_atomic_check_only(state); if (ret == -EDEADLK) {
drm_atomic_state_clear(state);
ret = drm_modeset_backoff(&ctx); if (!ret) goto retry_conn_state;
}
KUNIT_ASSERT_EQ(test, ret, 0);
/* * Test that if we change the maximum bpc property to a different value, * we trigger a mode change on the connector's CRTC, which will in turn * disable/enable the connector.
*/ staticvoid drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *old_conn_state; struct drm_connector_state *new_conn_state; struct drm_crtc_state *crtc_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if we set the output bpc property to the same value, we * don't trigger a mode change on the connector's CRTC and leave the * connector unaffected.
*/ staticvoid drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *old_conn_state; struct drm_connector_state *new_conn_state; struct drm_crtc_state *crtc_state; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if we have an HDMI connector but a !HDMI display, we always * output RGB with 8 bpc.
*/ staticvoid drm_test_check_output_bpc_dvi(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that when doing a commit which would use RGB 8bpc, the TMDS * clock rate stored in the connector state is equal to the mode clock
*/ staticvoid drm_test_check_tmds_char_rate_rgb_8bpc(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that when doing a commit which would use RGB 10bpc, the TMDS * clock rate stored in the connector state is equal to 1.25 times the * mode pixel clock
*/ staticvoid drm_test_check_tmds_char_rate_rgb_10bpc(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that when doing a commit which would use RGB 12bpc, the TMDS * clock rate stored in the connector state is equal to 1.5 times the * mode pixel clock
*/ staticvoid drm_test_check_tmds_char_rate_rgb_12bpc(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_mode *preferred; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if we filter a rate through our hook, it's indeed rejected * by the whole atomic_check logic. * * We do so by first doing a commit on the pipeline to make sure that it * works, change the HDMI helpers pointer, and then try the same commit * again to see if it fails as it should.
*/ staticvoid drm_test_check_hdmi_funcs_reject_rate(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_atomic_state *state; struct drm_display_mode *preferred; struct drm_crtc_state *crtc_state; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if: * - We have an HDMI connector supporting RGB only * - The chosen mode has a TMDS character rate higher than the display * supports in RGB/12bpc * - The chosen mode has a TMDS character rate lower than the display * supports in RGB/10bpc. * * Then we will pick the latter, and the computed TMDS character rate * will be equal to 1.25 times the mode pixel clock.
*/ staticvoid drm_test_check_max_tmds_rate_bpc_fallback_rgb(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if: * - We have an HDMI connector and a display supporting both RGB and YUV420 * - The chosen mode can be supported in YUV420 output format only * - The chosen mode has a TMDS character rate higher than the display * supports in YUV420/12bpc * - The chosen mode has a TMDS character rate lower than the display * supports in YUV420/10bpc. * * Then we will pick the latter, and the computed TMDS character rate * will be equal to 1.25 * 0.5 times the mode pixel clock.
*/ staticvoid drm_test_check_max_tmds_rate_bpc_fallback_yuv420(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *yuv420_only_mode; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if: * - We have an HDMI connector supporting both RGB and YUV422 and up to * 12 bpc * - The chosen mode has a TMDS character rate higher than the display * supports in RGB/12bpc but lower than the display supports in * RGB/10bpc * - The chosen mode has a TMDS character rate lower than the display * supports in YUV422/12bpc. * * Then we will prefer to keep the RGB format with a lower bpc over * picking YUV422.
*/ staticvoid drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if: * - We have an HDMI connector supporting both RGB and YUV420 and up to * 12 bpc * - The chosen mode has a TMDS character rate higher than the display * supports in RGB/10bpc but lower than the display supports in * RGB/8bpc * - The chosen mode has a TMDS character rate lower than the display * supports in YUV420/12bpc. * * Then we will prefer to keep the RGB format with a lower bpc over * picking YUV420.
*/ staticvoid drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * Test that if a driver supports only RGB, but the chosen mode can be * supported by the screen only in YUV420 output format, we end up with * unsuccessful fallback attempts.
*/ staticvoid drm_test_check_driver_unsupported_fallback_yuv420(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_crtc_state *crtc_state; struct drm_atomic_state *state; struct drm_display_info *info; struct drm_display_mode *preferred, *yuv420_only_mode; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
retry_crtc_state:
crtc_state = drm_atomic_get_crtc_state(state, crtc); if (PTR_ERR(crtc_state) == -EDEADLK) {
drm_atomic_state_clear(state);
ret = drm_modeset_backoff(&ctx); if (!ret) goto retry_crtc_state;
}
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state);
ret = drm_atomic_set_mode_for_crtc(crtc_state, yuv420_only_mode);
KUNIT_EXPECT_EQ(test, ret, 0);
ret = drm_atomic_check_only(state); if (ret == -EDEADLK) {
drm_atomic_state_clear(state);
ret = drm_modeset_backoff(&ctx); if (!ret) goto retry_crtc_state;
}
KUNIT_ASSERT_LT(test, ret, 0);
/* * Test that if a driver and screen supports RGB and YUV formats, and we * try to set the VIC 1 mode, we end up with 8bpc RGB even if we could * have had a higher bpc.
*/ staticvoid drm_test_check_output_bpc_format_vic_1(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *mode; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * NOTE: We can't use drm_hdmi_compute_mode_clock() * here because we're trying to get the rate of an invalid * configuration. * * Thus, we have to calculate the rate by hand.
*/
rate = mode->clock * 1500;
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
/* * Test that if a driver supports only RGB but the screen also supports * YUV formats, we only end up with an RGB format.
*/ staticvoid drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * We're making sure that YUV422 would be the preferred option * here: we're always favouring higher bpc, we can't have RGB * because the TMDS character rate exceeds the maximum supported * by the display, and YUV422 works for that display. * * But since the driver only supports RGB, we should fallback to * a lower bpc with RGB.
*/
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
KUNIT_ASSERT_GT(test, rate, info->max_tmds_clock * 1000);
/* * Test that if a screen supports only RGB but the driver also supports * YUV formats, we only end up with an RGB format.
*/ staticvoid drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * We're making sure that YUV422 would be the preferred option * here: we're always favouring higher bpc, we can't have RGB * because the TMDS character rate exceeds the maximum supported * by the display, and YUV422 works for that display. * * But since the display only supports RGB, we should fallback to * a lower bpc with RGB.
*/
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
KUNIT_ASSERT_GT(test, rate, info->max_tmds_clock * 1000);
/* * Test that if a display supports higher bpc but the driver only * supports 8 bpc, we only end up with 8 bpc even if we could have had a * higher bpc.
*/ staticvoid drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * We're making sure that we have headroom on the TMDS character * clock to actually use 12bpc.
*/
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
/* * Test that if a driver supports higher bpc but the display only * supports 8 bpc, we only end up with 8 bpc even if we could have had a * higher bpc.
*/ staticvoid drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_modeset_acquire_ctx ctx; struct drm_connector_state *conn_state; struct drm_display_info *info; struct drm_display_mode *preferred; unsignedlonglong rate; struct drm_connector *conn; struct drm_device *drm; struct drm_crtc *crtc; int ret;
/* * We're making sure that we have headroom on the TMDS character * clock to actually use 12bpc.
*/
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
staticstruct kunit_case drm_atomic_helper_connector_hdmi_check_tests[] = {
KUNIT_CASE(drm_test_check_broadcast_rgb_auto_cea_mode),
KUNIT_CASE(drm_test_check_broadcast_rgb_auto_cea_mode_vic_1),
KUNIT_CASE(drm_test_check_broadcast_rgb_full_cea_mode),
KUNIT_CASE(drm_test_check_broadcast_rgb_full_cea_mode_vic_1),
KUNIT_CASE(drm_test_check_broadcast_rgb_limited_cea_mode),
KUNIT_CASE(drm_test_check_broadcast_rgb_limited_cea_mode_vic_1),
KUNIT_CASE_PARAM(drm_test_check_broadcast_rgb_cea_mode_yuv420,
check_broadcast_rgb_cea_mode_yuv420_gen_params),
KUNIT_CASE(drm_test_check_broadcast_rgb_crtc_mode_changed),
KUNIT_CASE(drm_test_check_broadcast_rgb_crtc_mode_not_changed),
KUNIT_CASE(drm_test_check_disable_connector),
KUNIT_CASE(drm_test_check_hdmi_funcs_reject_rate),
KUNIT_CASE(drm_test_check_max_tmds_rate_bpc_fallback_rgb),
KUNIT_CASE(drm_test_check_max_tmds_rate_bpc_fallback_yuv420),
KUNIT_CASE(drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422),
KUNIT_CASE(drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420),
KUNIT_CASE(drm_test_check_driver_unsupported_fallback_yuv420),
KUNIT_CASE(drm_test_check_output_bpc_crtc_mode_changed),
KUNIT_CASE(drm_test_check_output_bpc_crtc_mode_not_changed),
KUNIT_CASE(drm_test_check_output_bpc_dvi),
KUNIT_CASE(drm_test_check_output_bpc_format_vic_1),
KUNIT_CASE(drm_test_check_output_bpc_format_display_8bpc_only),
KUNIT_CASE(drm_test_check_output_bpc_format_display_rgb_only),
KUNIT_CASE(drm_test_check_output_bpc_format_driver_8bpc_only),
KUNIT_CASE(drm_test_check_output_bpc_format_driver_rgb_only),
KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_8bpc),
KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_10bpc),
KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_12bpc), /* * TODO: We should have tests to check that a change in the * format triggers a CRTC mode change just like we do for the * RGB Quantization and BPC. * * However, we don't have any way to control which format gets * picked up aside from changing the BPC or mode which would * already trigger a mode change.
*/
{ }
};
/* * Test that the value of the Broadcast RGB property out of reset is set * to auto.
*/ staticvoid drm_test_check_broadcast_rgb_value(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_connector_state *conn_state; struct drm_connector *conn;
/* * Test that if the connector was initialised with a maximum bpc of 8, * the value of the max_bpc and max_requested_bpc properties out of * reset are also set to 8, and output_bpc is set to 0 and will be * filled at atomic_check time.
*/ staticvoid drm_test_check_bpc_8_value(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_connector_state *conn_state; struct drm_connector *conn;
/* * Test that if the connector was initialised with a maximum bpc of 10, * the value of the max_bpc and max_requested_bpc properties out of * reset are also set to 10, and output_bpc is set to 0 and will be * filled at atomic_check time.
*/ staticvoid drm_test_check_bpc_10_value(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_connector_state *conn_state; struct drm_connector *conn;
/* * Test that if the connector was initialised with a maximum bpc of 12, * the value of the max_bpc and max_requested_bpc properties out of * reset are also set to 12, and output_bpc is set to 0 and will be * filled at atomic_check time.
*/ staticvoid drm_test_check_bpc_12_value(struct kunit *test)
{ struct drm_atomic_helper_connector_hdmi_priv *priv; struct drm_connector_state *conn_state; struct drm_connector *conn;
/* * Test that the value of the output format property out of reset is set * to RGB, even if the driver supports more than that.
*/ staticvoid drm_test_check_format_value(struct kunit *test)
{
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5
¤ Dauer der Verarbeitung: 0.30 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.