#!/usr/bin/env python3
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License a
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from python.generators.diff_tests.testing import Path, DataPath, Metric
from python.generators.diff_tests.testing import Csv, Json, TextProto
from python.generators.diff_tests.testing import DiffTestBlueprint
from python.generators.diff_tests.testing import TestSuite


class ChromeProcesses(TestSuite):

  def test_chrome_processes(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_scroll_without_vsync.pftrace'),
        query="""
        SELECT RUN_METRIC('chrome/chrome_processes.sql');
        SELECT pid, name, process_type FROM chrome_process;
        """,
        out=Csv("""
        "pid","name","process_type"
        18250,"Renderer","Renderer"
        17547,"Browser","Browser"
        18277,"GPU Process","Gpu"
        17578,"Browser","Browser"
        """))

  def test_chrome_processes_android_systrace(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_android_systrace.pftrace'),
        query="""
        SELECT RUN_METRIC('chrome/chrome_processes.sql');
        SELECT pid, name, process_type FROM chrome_process;
        """,
        out=Path('chrome_processes_android_systrace.out'))

  def test_chrome_threads(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_scroll_without_vsync.pftrace'),
        query="""
        SELECT RUN_METRIC('chrome/chrome_processes.sql');
        SELECT tid, name, is_main_thread, canonical_name
        FROM chrome_thread
        ORDER BY tid, name;
        """,
        out=Path('chrome_threads.out'))

  def test_chrome_threads_android_systrace(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_android_systrace.pftrace'),
        query="""
        SELECT RUN_METRIC('chrome/chrome_processes.sql');
        SELECT tid, name, is_main_thread, canonical_name
        FROM chrome_thread
        ORDER BY tid, name;
        """,
        out=Path('chrome_threads_android_systrace.out'))

  def test_chrome_processes_type(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_scroll_without_vsync.pftrace'),
        query="""
        SELECT pid, name, string_value AS chrome_process_type
        FROM
          process
        JOIN
          (SELECT * FROM args WHERE key = "chrome.process_type") chrome_process_args
          ON
            process.arg_set_id = chrome_process_args.arg_set_id
        ORDER BY pid;
        """,
        out=Csv("""
        "pid","name","chrome_process_type"
        17547,"Browser","Browser"
        17578,"Browser","Browser"
        18250,"Renderer","Renderer"
        18277,"GPU Process","Gpu"
        """))

  def test_chrome_processes_type_android_systrace(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_android_systrace.pftrace'),
        query="""
        SELECT pid, name, string_value AS chrome_process_type
        FROM
          process
        JOIN
          (SELECT * FROM args WHERE key = "chrome.process_type") chrome_process_args
          ON
            process.arg_set_id = chrome_process_args.arg_set_id
        ORDER BY pid;
        """,
        out=Path('chrome_processes_type_android_systrace.out'))

  def test_track_with_chrome_process(self):
    return DiffTestBlueprint(
        trace=TextProto(r"""
        packet {
          trusted_packet_sequence_id: 1
          incremental_state_cleared: true
          timestamp: 0
          track_descriptor {
            uuid: 10
            process {
              pid: 5
              process_name: "p5"
            }
            # Empty Chrome process. This is similar to a process descriptor emitted by
            # Chrome for a process with an unknown Chrome process_type. This process
            # should still receive a "chrome_process_type" arg in the args table, but
            # with a NULL value.
            chrome_process {}
          }
        }
        """),
        query="""
        SELECT pid, name, string_value AS chrome_process_type
        FROM
          process
        JOIN
          (SELECT * FROM args WHERE key = "chrome.process_type") chrome_process_args
          ON
            process.arg_set_id = chrome_process_args.arg_set_id
        ORDER BY pid;
        """,
        out=Csv("""
        "pid","name","chrome_process_type"
        5,"p5","[NULL]"
        """))

  # Missing processes.
  def test_chrome_missing_processes_default_trace(self):
    return DiffTestBlueprint(
        trace=DataPath('chrome_scroll_without_vsync.pftrace'),
        query="""
        SELECT upid, pid, reliable_from
        FROM
          experimental_missing_chrome_processes
        JOIN
          process
          USING(upid)
        ORDER BY upid;
        """,
        out=Csv("""
        "upid","pid","reliable_from"
        """))

  def test_chrome_missing_processes(self):
    return DiffTestBlueprint(
        trace=TextProto(r"""
        packet {
          timestamp: 1
          incremental_state_cleared: true
          trusted_packet_sequence_id: 1
          track_event {
            type: TYPE_INSTANT
            name: "ActiveProcesses"
            chrome_active_processes {
              pid: 10
              pid: 100
              pid: 1000
            }
          }
        }
        packet {
          timestamp: 1
          trusted_packet_sequence_id: 2
          track_descriptor {
            uuid: 1
            process {
              pid: 10
            }
            parent_uuid: 0
          }
        }
        packet {
          timestamp: 1000000000
          trusted_packet_sequence_id: 3
          track_descriptor {
            uuid: 2
            process {
              pid: 100
            }
            parent_uuid: 0
          }
        }
        """),
        query="""
        SELECT upid, pid, reliable_from
        FROM
          experimental_missing_chrome_processes
        JOIN
          process
          USING(upid)
        ORDER BY upid;
        """,
        out=Csv("""
        "upid","pid","reliable_from"
        2,100,1000000000
        3,1000,"[NULL]"
        """))

  def test_chrome_missing_processes_args(self):
    return DiffTestBlueprint(
        trace=TextProto(r"""
        packet {
          timestamp: 1
          incremental_state_cleared: true
          trusted_packet_sequence_id: 1
          track_event {
            type: TYPE_INSTANT
            name: "ActiveProcesses"
            chrome_active_processes {
              pid: 10
              pid: 100
              pid: 1000
            }
          }
        }
        packet {
          timestamp: 1
          trusted_packet_sequence_id: 2
          track_descriptor {
            uuid: 1
            process {
              pid: 10
            }
            parent_uuid: 0
          }
        }
        packet {
          timestamp: 1000000000
          trusted_packet_sequence_id: 3
          track_descriptor {
            uuid: 2
            process {
              pid: 100
            }
            parent_uuid: 0
          }
        }
        """),
        query="""
        SELECT arg_set_id, key, int_value
        FROM
          slice
        JOIN
          args
          USING(arg_set_id)
        ORDER BY arg_set_id, key;
        """,
        out=Csv("""
        "arg_set_id","key","int_value"
        2,"chrome_active_processes.pid[0]",10
        2,"chrome_active_processes.pid[1]",100
        2,"chrome_active_processes.pid[2]",1000
        """))

  def test_chrome_missing_processes_2(self):
    return DiffTestBlueprint(
        trace=TextProto(r"""
        packet {
          timestamp: 1
          incremental_state_cleared: true
          trusted_packet_sequence_id: 1
          track_event {
            type: TYPE_INSTANT
            name: "ActiveProcesses"
            [perfetto.protos.ChromeTrackEvent.active_processes]: {
              pid: 10
              pid: 100
              pid: 1000
            }
          }
        }
        packet {
          timestamp: 1
          trusted_packet_sequence_id: 2
          track_descriptor {
            uuid: 1
            process {
              pid: 10
            }
            parent_uuid: 0
          }
        }
        packet {
          timestamp: 1000000000
          trusted_packet_sequence_id: 3
          track_descriptor {
            uuid: 2
            process {
              pid: 100
            }
            parent_uuid: 0
          }
        }
        """),
        query="""
        SELECT upid, pid, reliable_from
        FROM
          experimental_missing_chrome_processes
        JOIN
          process
          USING(upid)
        ORDER BY upid;
        """,
        out=Csv("""
        "upid","pid","reliable_from"
        2,100,1000000000
        3,1000,"[NULL]"
        """))

  def test_chrome_missing_processes_extension_args(self):
    return DiffTestBlueprint(
        trace=TextProto(r"""
        packet {
          timestamp: 1
          incremental_state_cleared: true
          trusted_packet_sequence_id: 1
          track_event {
            type: TYPE_INSTANT
            name: "ActiveProcesses"
            [perfetto.protos.ChromeTrackEvent.active_processes]: {
              pid: 10
              pid: 100
              pid: 1000
            }
          }
        }
        packet {
          timestamp: 1
          trusted_packet_sequence_id: 2
          track_descriptor {
            uuid: 1
            process {
              pid: 10
            }
            parent_uuid: 0
          }
        }
        packet {
          timestamp: 1000000000
          trusted_packet_sequence_id: 3
          track_descriptor {
            uuid: 2
            process {
              pid: 100
            }
            parent_uuid: 0
          }
        }
        """),
        query="""
        SELECT arg_set_id, key, int_value
        FROM
          slice
        JOIN
          args
          USING(arg_set_id)
        ORDER BY arg_set_id, key;
        """,
        out=Csv("""
        "arg_set_id","key","int_value"
        2,"active_processes.pid[0]",10
        2,"active_processes.pid[1]",100
        2,"active_processes.pid[2]",1000
        """))
